我最近意识到strip
Python 的内置函数(以及它的子元素rstrip
and lstrip
)不会将作为参数提供给它的字符串视为有序的字符序列,而是将其视为一种字符的“容器”:
>>> s = 'abcfooabc'
>>> s.strip('abc')
'foo'
>>> s.strip('cba')
'foo'
>>> s.strip('acb')
'foo'
等等。
有没有办法从给定的字符串中去除有序的子字符串,以便在上面的示例中输出会有所不同?
我最近意识到strip
Python 的内置函数(以及它的子元素rstrip
and lstrip
)不会将作为参数提供给它的字符串视为有序的字符序列,而是将其视为一种字符的“容器”:
>>> s = 'abcfooabc'
>>> s.strip('abc')
'foo'
>>> s.strip('cba')
'foo'
>>> s.strip('acb')
'foo'
等等。
有没有办法从给定的字符串中去除有序的子字符串,以便在上面的示例中输出会有所不同?
当我第一次开始时,我遇到了同样的问题。
试试str.replace吗?
>>> s = 'abcfooabc'
>>> s.replace("abc", "")
0: 'foo'
>>> s.replace("cba", "")
1: 'abcfooabc'
>>> s.replace("acb", "")
2: 'abcfooabc'
我不知道内置的方式,不,但它很简单:
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
从 Python 3.9 开始,您可以使用str.removeprefix和str.removesuffix。
从文档:
'TestHook'.removeprefix('Test') # >> 'Hook'
'MiscTests'.removesuffix('Tests') # >> 'Misc'
我很惊讶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'
这个呢:
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]