12

我最近意识到stripPython 的内置函数(以及它的子元素rstripand lstrip)不会将作为参数提供给它的字符串视为有序的字符序列,而是将其视为一种字符的“容器”:

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

等等。

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

4

5 回答 5

10

当我第一次开始时,我遇到了同样的问题。

试试str.replace吗?

>>> s = 'abcfooabc'
>>> s.replace("abc", "")
0: 'foo'
>>> s.replace("cba", "")
1: 'abcfooabc'
>>> s.replace("acb", "")
2: 'abcfooabc'
于 2013-04-08T01:58:51.307 回答
6

我不知道内置的方式,不,但它很简单:

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
于 2013-04-08T01:52:57.193 回答
4

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

从文档:

'TestHook'.removeprefix('Test')  # >> 'Hook'
'MiscTests'.removesuffix('Tests')  # >> 'Misc'
于 2021-01-23T05:28:35.940 回答
2

我很惊讶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'
于 2019-11-29T14:31:13.060 回答
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]
于 2013-04-08T01:58:31.350 回答