【问题标题】:string.rstrip() is removing extra charactersstring.rstrip() 正在删除多余的字符
【发布时间】:2017-09-14 15:08:54
【问题描述】:

为什么这个语句要去掉'PIPELINE'中的'E'

In: 'PIPELINE_DEV'.rstrip('_DEV')
Out: 'PIPELIN'

但是这个语句并没有去掉'S':

In: 'PIPELINES_DEV'.rstrip('_DEV')
Out: 'PIPELINES'

此语句删除了末尾的所有 E:

In: 'PIPELINEEEEEEEE_DEV'.rstrip('_DEV')
Out: 'PIPELIN'

当我将 rstrip 变成 2 个单独的语句时,它工作正常:

In: 'PIPELINE_DEV'.rstrip('DEV').rstrip('_')
Out: 'PIPELINE'

【问题讨论】:

  • 您为什么希望'PIPELINES_DEV'.rstrip('_DEV') 删除S
  • 传递给.strip().rstrip() 的多字符字符串表示要删除的字符集(以任何顺序),而不是文字字符串。跨度>
  • @ZachGates 我不希望'PIPELINES_DEV'.rstrip('_DEV') 删除S。在提出这个问题时,我不明白为什么要删除 PIPELINE 中的 E 而不是 PIPELINES 中的 S

标签: python string python-3.x


【解决方案1】:

rstrip 从应用它的字符串中删除您提供的字符的任何尾随实例,直到找到不匹配的内容。这在its documentation 中有说明:

chars 参数不是后缀;相反,其值的所有组合都被剥离

使用rstrip('_DEV'),它将从字符串中删除_DEV,然后删除所有Es(或'D's 或'V's 或'_'s),因为它们属于您所使用的字符集给定的(并且没有找到不在该集合中的其他字符)。

当您使用.rstrip('DEV').rstrip('_') 时,对rstrip 的第一次调用会删除'DEV',然后因为'_' 不在字符集'DEV' 中而停止。当第二次调用rstrip 时,'_' 将被删除。


请注意,在 Python >= 3.9 中,str.removesuffixadded,以解决这种常见的误解。使用removesuffix,您可以提供一个被删除的后缀字符串(如果存在),作为应用它的字符串的后缀。

你的例子:

'PIPELINE_DEV'.removesuffix('_DEV')

只会删除'_DEV' 后缀。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    相关资源
    最近更新 更多