>>> x = 'abc_cde_fgh'
>>> x.strip('abc_cde')
'fgh'
期望出现 _fgh
。
如何理解这个结果?
Strip函数用于从子字符串的两端删除任何字符:它不会删除尾随或前导单词。
以下示例很好地演示了这一点:
x.strip('ab_ch')
'de_fg'
由于字母"a"、"b"、"c"、"h"和"_"都在删除的范围内,因此前导的"abc_c"都被删除了。其他字符不会被删除。
如果您想要删除前导或尾随的单词,我建议使用re
或startswith/endswith
。
def rstrip_word(str, word):
if str.endswith(word):
return str[:-len(word)]
return str
def lstrip_word(str, word):
if str.startswith(word):
return str[len(word):]
return str
def strip_word(str, word):
return rstrip_word(lstrip_word(str, word), word)
删除多个单词
从字符串中删除多个单词的一种非常简单的实现方法(一种贪心算法)可以按照以下方式完成:
def rstrip_word(str, *words):
for word in words:
if str.endswith(word):
return str[:-len(word)]
return str
def lstrip_word(str, *words):
for word in words:
if str.startswith(word):
return str[len(word):]
return str
def strip_word(str, *words):
return rstrip_word(lstrip_word(str, *words), *words)
>>> strip_word(x, "abc", "adc_")
'_cde_fgh'
strip()函数会移除字符,并非子字符串。例如:
x.strip('abcde_')
'fgh'
word
,但这不是strip的作用。谢谢。 - Dylan Su