条带意外删除“_”
strip remove '_' unexpectedly
>>> 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)
请注意此算法是贪心算法,它会找到第一个可能的示例,然后return:它可能不会像您期望的那样运行。找到最大长度匹配(虽然不是太棘手)有点复杂。
>>> strip_word(x, "abc", "adc_")
'_cde_fgh'
在 strip 方法的文档中 "The chars argument is a string specifying the set of characters to be removed." 这就是为什么除了 "fgh" 之外的每个字符都被删除的原因(包括两个下划线)。
strip() 删除字符,不是 子字符串。例如:
x.strip('abcde_')
'fgh'
>>> 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)
请注意此算法是贪心算法,它会找到第一个可能的示例,然后return:它可能不会像您期望的那样运行。找到最大长度匹配(虽然不是太棘手)有点复杂。
>>> strip_word(x, "abc", "adc_")
'_cde_fgh'
在 strip 方法的文档中 "The chars argument is a string specifying the set of characters to be removed." 这就是为什么除了 "fgh" 之外的每个字符都被删除的原因(包括两个下划线)。
strip() 删除字符,不是 子字符串。例如:
x.strip('abcde_')
'fgh'