从字符串中删除前缀

时间:2013-06-03 06:47:20

标签: python

我试图以明确的pythonic方式做以下事情:

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

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

这给出了:

xtensions

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

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

6 个答案:

答案 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类型。