strip remove '_' unexpectedly

て烟熏妆下的殇ゞ 提交于 2020-01-30 05:58:14

问题


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

_fgh is expected.

How to understard this result?


回答1:


Strip removes any characters it finds from either end from the substring: it doesn't remove a trailing or leading word.

This example demonstrates it nicely:

x.strip('ab_ch')
'de_fg'

Since the characters "a", "b", "c", "h", and "_" are in the remove case, the leading "abc_c" are all removed. The other characters are not removed.

If you would like to remove a leading or trailing word, I would recommend using re or 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)

Removing Multiple Words

A very simple implementation (a greedy one) to remove multiple words from a string can be done as follows:

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)

Please note this algorithm is greedy, it will find the first possible example and then return: it may not behave as you expect. Finding the maximum length match (although not too tricky) is a bit more involved.

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



回答2:


In the documentation of the strip method "The chars argument is a string specifying the set of characters to be removed." That is why every chars except "fgh" are removed (including the two underscores).




回答3:


strip() removes characters, not a substring. For example:

x.strip('abcde_')
'fgh'


来源:https://stackoverflow.com/questions/44961932/strip-remove-unexpectedly

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!