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

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

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

这给:

xtensions

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

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


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

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

text.removeprefix(prefix)

在旧版本中,您可以使用相同的行为:

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

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

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

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

我认为你可以使用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):]