我试图以明确的pythonic方式做以下事情:
def remove_prefix(str, prefix):
return str.lstrip(prefix)
print remove_prefix('template.extensions', 'template.')
这给出了:
xtensions
这不是我期待的(extensions
)。显然(愚蠢的我),因为我错误地使用了lstrip:lstrip将删除传递的chars
字符串中出现的所有字符,而不是将该字符串视为真正的字符串,而是将其视为“一组字符”从字符串的开头删除“。
是否有一种从字符串开头删除子字符串的标准方法?
答案 0 :(得分:105)
我不了解"标准方式"。
def remove_prefix(text, prefix):
if text.startswith(prefix):
return text[len(prefix):]
return text # or whatever
答案 1 :(得分:22)
短而甜蜜:
def remove_prefix(text, prefix):
return text[text.startswith(prefix) and len(prefix):]
答案 2 :(得分:19)
这个怎么样(有点晚):
def remove_prefix(s, prefix):
return s[len(prefix):] if s.startswith(prefix) else s
答案 3 :(得分:7)
我认为您可以使用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
答案 4 :(得分:6)
正则表达式解决方案(最好的方法是@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
答案 5 :(得分:0)
def remove_prefix(str, prefix):
if str.startswith(prefix):
return str[len(prefix):]
else:
return str
另外,str
是变量的错误名称,因为它会隐藏str
类型。