我正在做以下事情:
'm:max'.lstrip('m:')
'ax'
我需要的是仅删除"m:"
。我有很多其他组合,我用它来过滤搜索结果 - 例如"g:Holiday
会搜索特定类别的“假日”。
此外,有时候没有前缀,这意味着它会搜索所有类别。
我该怎么做?
答案 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)