Python 如何进行非贪婪的lstrip()

Python 如何进行非贪婪的lstrip(),python,Python,我正在做以下工作: 'm:max'.lstrip('m:') 'ax' 我需要的是只删除“m:。我有很多其他的组合,我用它们来过滤搜索结果——例如,“g:Holiday将搜索特定类别的“Holiday” 此外,有时没有前缀,这意味着它将搜索所有类别 我将如何做到这一点?这是我唯一能找到实现上述目标的方法: re.sub(r'^[a-z]:','',string) 您不完全清楚规则是什么,但是如果只是删除第一个冒号之前的所有内容,那么您可以使用拆分: >>> 'm:abc'.

我正在做以下工作:

'm:max'.lstrip('m:')
'ax'
我需要的是只删除
“m:
。我有很多其他的组合,我用它们来过滤搜索结果——例如,
“g:Holiday
将搜索特定类别的“Holiday”

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


我将如何做到这一点?

这是我唯一能找到实现上述目标的方法:

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

您不完全清楚规则是什么,但是如果只是删除第一个冒号之前的所有内容,那么您可以使用
拆分

>>> 'm:abc'.split(':',1)[-1]
'abc'
>>> 'mabc'.split(':',1)[-1]
'mabc'
>>> 'm:a:bc'.split(':',1)[-1]
'a:bc'
split
的第二个参数限制要执行的拆分次数,
[-1]
获取拆分的正确部分(如果没有拆分,则获取第一个元素)

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

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

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

顺便说一句


这是错误的;lstrip使用一组字符进行剥离(顺序无关),而不是初始子字符串进行选择性剥离。

'm:max'[2:]
?你总是知道有两个字符的前缀吗?这里有什么规则?你总是修剪前两个字符吗?字符串中的第一个冒号总是分隔符吗?你总是想修剪一段吗?这里有一些隐含的背景,定义了你在y中逃避的这个问题的范围和要求我们的问题没有具体说明,因此很难给出有用的答案。例如,“类别”是什么“谁和什么在搜索它们?这将匹配一个字符串中间的冒号。你可能想用一个<代码> ^ < /代码>来锚定。但是,但是……我以为OP已经意识到lstrip是多么的错误。问题是如何处理它。使用此方法还将从
'bob:abc'
中剥离
'bob:'
。如果这是可以接受的,那么这个就可以了。
'm:max'.lstrip('m:')