Python re.sub:非贪婪不';I don’我没有按预期工作

Python re.sub:非贪婪不';I don’我没有按预期工作,python,regex,Python,Regex,我在ipython中有以下代码。我希望它删除开头的“ab”,因为。*?是一个不贪婪的人。但是为什么它会一直移动到最后一个b In [15]: b="abcabcabc" In [16]: re.sub(".*?b","",b) Out[16]: 'c' 这是因为默认情况下,re.sub()将搜索并替换所有出现的内容 >>> import re >>> b="abcabcabc" >>> re.sub(".*?b","",b)

我在ipython中有以下代码。我希望它删除开头的“ab”,因为。*?是一个不贪婪的人。但是为什么它会一直移动到最后一个b

  In [15]: b="abcabcabc"

  In [16]: re.sub(".*?b","",b)
  Out[16]: 'c'

这是因为默认情况下,
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'


这是因为默认情况下,
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'

巨蟒说:

可选参数计数是要替换的最大模式出现次数;计数必须是非负整数。如果省略或为零,将替换所有出现的内容

因此,您可以使用
count=1
调用
re.sub
,以获得所需的结果:

re.sub(".*?b", "", b, 1)
#output
'cabcabc'
巨蟒说:

可选参数计数是要替换的最大模式出现次数;计数必须是非负整数。如果省略或为零,将替换所有出现的内容

因此,您可以使用
count=1
调用
re.sub
,以获得所需的结果:

re.sub(".*?b", "", b, 1)
#output
'cabcabc'