从字符串中删除有序的字符序列

时间:2013-04-08 01:48:33

标签: python python-3.x strip

我最近意识到Python的strip内置(以及它的子rstriplstrip)并不将作为参数赋予它的字符串视为有序序列chars,而是作为chars的一种“储存”:

>>> s = 'abcfooabc'
>>> s.strip('abc')
'foo'
>>> s.strip('cba')
'foo'
>>> s.strip('acb')
'foo'

等等。

有没有办法从给定字符串中删除有序子字符串,以便上述示例中的输出会有所不同?

5 个答案:

答案 0 :(得分:5)

我不知道内置方式,不,但它非常简单:

def strip_string(string, to_strip):
    if to_strip:
        while string.startswith(to_strip):
            string = string[len(to_strip):]
        while string.endswith(to_strip):
            string = string[:-len(to_strip)]
    return string

答案 1 :(得分:3)

我刚开始时遇到同样的问题。

请尝试str.replace

>>> s = 'abcfooabc'
>>> s.replace("abc", "")
0: 'foo'
>>> s.replace("cba", "")
1: 'abcfooabc'
>>> s.replace("acb", "")
2: 'abcfooabc'

答案 2 :(得分:2)

从 Python 3.9 开始,您可以使用 str.removeprefixstr.removesuffix

来自文档:

'TestHook'.removeprefix('Test')  # >> 'Hook'
'MiscTests'.removesuffix('Tests')  # >> 'Misc'

答案 3 :(得分:0)

这是怎么回事: s.split('abc')

返回:['', 'foo', '']

因此,我们可以将其更改为:

[i for i in s.split('abc') if i != '']。如果您只想'foo'而不是['foo'],则可以执行:[i for i in s.split('abc') if i != ''][0]

所有在一起:

def splitString(s, delimiter):
    return [i for i in s.split(delimiter) if i != ''][0]

答案 4 :(得分:0)

令我惊讶的是re.sub尚未被提及:

>>> re.sub("^abc", "", "abcfooabc") # ^ regex operator matches the beginning of a string
'fooabc'
>>> re.sub("^abc|abc$", "", "abcfooabc") # | string begins with abc or (|) ends with abc
'foo'
>>> re.sub("abc$", "", "abcfooabc") # | string begins with abc or (|) ends with abc
'abcfoo'