re.sub: нежадный не работает так, как ожидалось

#python #regex

#питон #регулярное выражение #python

Вопрос:

У меня есть следующий код в ipython. Я ожидаю, что с тех пор он удалит начало «ab». *? является нежадным человеком. Но почему он удаляется полностью, вплоть до последнего b?

   In [15]: b="abcabcabc"

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

Ответ №1:

Это потому, что по умолчанию 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)
  

Ответ №2: