str.strip() 的奇怪行为

5
>>> t1 = "abcd.org.gz"
>>> t1
'abcd.org.gz'
>>> t1.strip("g")
'abcd.org.gz'
>>> t1.strip("gz")
'abcd.org.'
>>> t1.strip(".gz")
'abcd.or'

为什么 '.org''g' 不见了?
5个回答

10

strip(".gz") 从字符串的开头和结尾移除任意一个字符 ., gz


9

'abcd.org.gz'.strip('.gzor') 会得到 'abcd' -- 令人惊讶的是,除非你注意到 S.strip([chars]) 中的 [] 并且记得字符串只是字符序列,否则文档字符串并不太有帮助。很好的解释,也有很好的替代方案。 - Wayne Werner
@Wayne:在文档中,[] 不是表示“可选”的意思吗? - kennytm
可能会出现这种情况,我不确定 - 但如果确实如此,我认为这在文档中应被视为错误。 - Wayne Werner
@Wayne:它在任何地方都被用作“可选”的,例如http://docs.python.org/py3k/library/functions.html#range。 - kennytm
我想这就是为什么一开始我没有将它作为建议集合而注意到它的原因!这意味着strip的文档字符串是含糊不清的,可以使用更清晰的措辞。虽然名称“chars”具有提示性,但文档字符串并不清楚它是否按照从前到后的顺序使用集合-至少对我来说不是。 - Wayne Werner
@WayneWerner 但这是可选的 - 如果您不加入参数,则默认为一个空格字符列表。 - Mark Ransom

5
在Python 3.9中,新增了两个字符串方法.removeprefix().removesuffix(),分别用于移除字符串的开头和结尾。这次方法名称非常清晰明了,可以很好地表述它们所执行的操作。
>>> print (sys.version)
3.9.0 
>>> t1 = "abcd.org.gz"
>>> t1.removesuffix('gz')
'abcd.org.'
>>> t1
'abcd.org.gz'
>>> t1.removesuffix('gz').removesuffix('.gz')
'abcd.org.'     # No unexpected effect from last removesuffix call
 

1
< p > 给 < code > strip 的参数是要删除的字符集,而不是子字符串。 来自文档

< blockquote > < p > chars 参数是指定要删除的字符集的字符串。

1
据我所知,strip 只能从字符串的开头或结尾删除内容。如果你想要从整个字符串中删除内容,请使用 replace。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接