剥离' _'出乎意料

时间:2017-07-07 03:07:41

标签: python strip

>>> x = 'abc_cde_fgh'
>>> x.strip('abc_cde')
'fgh'
预计

_fgh

如何理解这个结果?

3 个答案:

答案 0 :(得分:6)

Strip会从子字符串中删除从任一端找到的任何字符:它不会删除尾随或前导字。

这个例子很好地证明了这一点:

x.strip('ab_ch')
'de_fg'

由于字符“a”,“b”,“c”,“h”和“_”处于删除情况,因此前导“abc_c”全部被删除。其他字符不会被删除。

如果您想删除前导或尾随的,我建议您使用restartswith/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)

请注意,此算法是 greedy ,它会找到第一个可能的示例,然后返回:它可能不会按预期运行。找到最大长度匹配(虽然不是太棘手)更多涉及。

>>> strip_word(x, "abc", "adc_")
'_cde_fgh'

答案 1 :(得分:0)

在strip方法的文档中“chars参数是一个字符串,指定要删除的字符集。”这就是为什么除了“fgh”之外的每个字符都被移除(包括两个下划线)。

答案 2 :(得分:0)

strip()删除字符,子字符串。例如:

x.strip('abcde_')
'fgh'