re.sub:非贪婪不能按预期工作



我在python中有以下代码。我希望它能删除开头的"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(pattern, repl, string, count=0, flags=0)

python文档说:

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

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

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

最新更新