从字符串中移除前缀

我正试图以一种清晰的python方式做以下工作:

def remove_prefix(str, prefix):
return str.lstrip(prefix)


print remove_prefix('template.extensions', 'template.')

这给:

xtensions

这不是我所期待的(extensions)。显然(我很愚蠢),因为我错误地使用了lstrip: lstrip将删除传递的chars字符串中出现的所有字符,不将该字符串视为真正的字符串,而是将其视为“从字符串开头删除的一组字符”。

是否有标准的方法从字符串的开头删除子字符串?

226569 次浏览

regex解决方案(最好的方法是@Elazar的解决方案,这只是为了好玩)

import re
def remove_prefix(text, prefix):
return re.sub(r'^{0}'.format(re.escape(prefix)), '', text)


>>> print remove_prefix('template.extensions', 'template.')
extensions

我不知道什么是"标准方式"。

def remove_prefix(text, prefix):
if text.startswith(prefix):
return text[len(prefix):]
return text  # or whatever

正如@Boris和@Stefan所指出的,在Python 3.9+上您可以使用

text.removeprefix(prefix)

同样的行为。

这个(有点晚了)怎么样:

def remove_prefix(s, prefix):
return s[len(prefix):] if s.startswith(prefix) else s
def remove_prefix(str, prefix):
if str.startswith(prefix):
return str[len(prefix):]
else:
return str

顺便说一句,str对于变量来说不是一个好名字,因为它掩盖了str类型。

我认为你可以使用str类型的方法来做到这一点。不需要正则表达式:

def remove_prefix(text, prefix):
if text.startswith(prefix): # only modify the text if it starts with the prefix
text = text.replace(prefix, "", 1) # remove one instance of prefix
return text

简短而甜蜜:

def remove_prefix(text, prefix):
return text[text.startswith(prefix) and len(prefix):]