我最近意识到Python的strip
内置(以及它的子rstrip
和lstrip
)并不将作为参数赋予它的字符串视为有序序列chars,而是作为chars的一种“储存”:
>>> s = 'abcfooabc'
>>> s.strip('abc')
'foo'
>>> s.strip('cba')
'foo'
>>> s.strip('acb')
'foo'
等等。
有没有办法从给定字符串中删除有序子字符串,以便上述示例中的输出会有所不同?
答案 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.removeprefix 和 str.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'