如何做一个非贪婪的lstrip()

时间:2013-04-30 19:23:23

标签: python

我正在做以下事情:

'm:max'.lstrip('m:')
'ax'

我需要的是仅删除"m:"。我有很多其他组合,我用它来过滤搜索结果 - 例如"g:Holiday会搜索特定类别的“假日”。

此外,有时候没有前缀,这意味着它会搜索所有类别。

我该怎么做?

3 个答案:

答案 0 :(得分:7)

您并不是100%明确规则是什么,但如果只是在第一次冒号之前删除所有内容的问题,那么您可以使用split

>>> 'm:abc'.split(':',1)[-1]
'abc'
>>> 'mabc'.split(':',1)[-1]
'mabc'
>>> 'm:a:bc'.split(':',1)[-1]
'a:bc'

split的第二个参数限制了要执行的拆分数量,[-1]得到了拆分的正确部分(如果没有拆分,则为第一个元素)。

请参阅the documentation on str.split()

但是,如果冒号必须位于第二位:

def remove_prefix(s):
    return s[2:] if len(s) > 1 and s[1] == ':' else s

答案 1 :(得分:6)

保持简单。

prefix = 'm:'
if a.startswith(prefix):
   a = a[len(prefix):]

顺便说一句

'm:max'.lstrip('m:')
这是错的; lstrip需要一组字符去掉(顺序无关紧要),而不是一个可选择剥离的初始子字符串。

答案 2 :(得分:1)

这是我弄清楚如何完成上述工作的唯一方法:

re.sub(r'^[a-z]:','',string)