我在ipython中有以下代码。我希望它能删除开头的" ab"从那以后。*?是一个非贪婪的人。但为什么它一直移到最后一个b?
In [15]: b="abcabcabc"
In [16]: re.sub(".*?b","",b)
Out[16]: 'c'
答案 0 :(得分:3)
这是因为,默认情况下,re.sub()
会搜索并替换所有匹配项
>>> import re
>>> b="abcabcabc"
>>> re.sub(".*?b","",b)
'c'
>>> re.sub("^.*?b","",b)
'cabcabc'
>>> re.sub(".*?b","",b, count=1)
'cabcabc'
>>> re.sub(".*?b","",b, count=2)
'cabc'
来自doc
re.sub(pattern, repl, string, count=0, flags=0)
答案 1 :(得分:1)
python docs说:
可选参数count是要替换的模式最大出现次数; count必须是非负整数。如果省略或为零,则将替换所有出现的内容
因此,您可以使用re.sub
致电count=1
以获得所需的结果:
re.sub(".*?b", "", b, 1)
#output
'cabcabc'