ac = "Pearl Riverb-Vaccines"
b = ac.strip("-Vaccines")
b = b.strip()
print(b)
ac = "Pearl Rivera-Vaccines"
b = ac.strip("-Vaccines")
b = b.strip()
print(b)
那么为什么第二个代码中缺少“ a”呢? 我已经尝试过其他所有字母,但它正在打印,但是字母“ a”是什么问题?
答案 0 :(得分:5)
strip()
从字符串末尾删除字符时不考虑计数或顺序。您传递给它的参数"-Vaccines"
包含一个“ a”,因此它将从“ Rivera”中删除该“ a”。没关系,它已经从“疫苗”中删除了“ a”,也没关系它不在V和c之间。
考虑另一个示例:
>>> "abcXqrqqqrrrqrqrqrqrqqrr".strip("qr")
'abcX'
即使q
的参数仅包含其中的一个,这里也删除了许多r
和strip
。
通常,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
模块更快。它将更加灵活,因为它将与任何非空字符串一起使用(而创建正则表达式将需要转义某些字符)。