РЕДАКТИРОВАТЬ: удалить исходный пример, потому что он вызвал дополнительные ответы. также исправлен заголовок.
Возникает вопрос, почему присутствие символа «$» в регулярном выражении влияет на жадность выражения:
Вот более простой пример:
>>> import re
>>> str = "baaaaaaaa"
>>> m = re.search(r"a+$", str)
>>> m.group()
'aaaaaaaa'
>>> m = re.search(r"a+?$", str)
>>> m.group()
'aaaaaaaa'
Знак «?» кажется, ничего не делает. Обратите внимание на то, что когда "$" удаляется, тогда появляется "?" соблюдается:
>>> m = re.search(r"a+?", str)
>>> m.group()
'a'
РЕДАКТИРОВАТЬ: Другими словами, «a +? $» Соответствует ВСЕМ, а не только последнему, это не то, что я ожидал. Вот описание регулярного выражения "+?" из документации python : "Adding '?' after the qualifier makes it perform the match in non-greedy or minimal fashion; as few characters as possible will be matched."
This does not seem to be the case in this example: the string "a" matches the regex "a+?$", so why isn't the match for the same regex on the string "baaaaaaa" just a single a (the rightmost one)?