Python Strip功能

时间:2019-06-10 12:55:51

标签: python

在python中,当我尝试此操作时:-

ac = "Pearl Riverb-Vaccines"
b = ac.strip("-Vaccines")
b = b.strip()
print(b)

输出为:-Pearl Riverb

但是当我尝试这个时:-

ac = "Pearl Rivera-Vaccines"
b = ac.strip("-Vaccines")
b = b.strip()
print(b)

输出为:-珠江

那么为什么第二个代码中缺少“ a”呢? 我已经尝试过其他所有字母,但它正在打印,但是字母“ a”是什么问题?

2 个答案:

答案 0 :(得分:5)

strip()从字符串末尾删除字符时不考虑计数或顺序。您传递给它的参数"-Vaccines"包含一个“ a”,因此它将从“ Rivera”中删除该“ a”。没关系,它已经从“疫苗”中删除了“ a”,也没关系它不在V和c之间。

考虑另一个示例:

>>> "abcXqrqqqrrrqrqrqrqrqqrr".strip("qr")
'abcX'

即使q的参数仅包含其中的一个,这里也删除了许多rstrip

通常,strip不适合从字符串末尾删除静态数量的字符。一种可能的选择是使用正则表达式,它可以匹配出现在字符串末尾的文字字符序列:

>>> import re
>>> ac = "Pearl Rivera-Vaccines"
>>> re.sub("-Vaccines$", "", ac)
'Pearl Rivera'

Tom Karzes在回答中指出,这种方法不适用于包含在正则表达式中具有特殊含义的字符的字符串。例如,

>>> import re
>>> s = "foo^bar"
>>> re.sub("^bar$", "", s)
'foo^bar'

^在正则表达式中具有特殊含义,因此模式"^bar$"无法匹配字符串s的末尾。如果要匹配的字符串包含特殊字符,则应手动或通过re.escape调用对其进行转义。

>>> import re
>>> s = "foo^bar"
>>> re.sub(r"\^bar$", "", s)
'foo'
>>> re.sub(re.escape("^bar") + "$", "", s)
'foo'

答案 1 :(得分:2)

问题在于strip的参数未按照您认为的方式使用。该参数不被视为字符序列,而是被视为一组字符。参数字符串中的任何字符都将被删除。例如:

"abaca".strip("ac")

产生:

'b'

因为"a""b"的所有实例均已删除。

如果只想从字符串中删除后缀,则可以执行以下操作:

ac = "Pearl Rivera-Vaccines"
s = "-Vaccines"
b = ac
if b.endswith(s):
    b = b[:-len(s)]

这将导致b具有以下值:

'Pearl Rivera'

请注意,这将比使用re模块更快。它将更加灵活,因为它将与任何非空字符串一起使用(而创建正则表达式将需要转义某些字符)。