РЕДАКТИРОВАТЬ: удалить исходный пример, потому что он спровоцировал вспомогательные ответы. также исправил заголовок.
Вопрос в том, почему наличие «$» в регулярном выражении влияет на жадность выражения:
Вот более простой пример:
>>> 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+?$" соответствует ВСЕМ a вместо только последнего, это не то, что я ожидал. Вот описание регулярного выражения "+?" из документов Python: "Добавление '?' после того, как квалификатор заставит его выполнить сопоставление нежадным или минимальным образом; будет сопоставлено как можно меньше символов».
В данном примере это не так: строка «a» соответствует регулярному выражению «a+?$», так почему же совпадение того же регулярного выражения в строке «baaaaaaa» не является просто одной a (крайний правый один)?
.+
? - person arussell84   schedule 04.05.2011