Python Regex: принудительное жадное совпадение с использованием чередованияPython

Программы на Python
Anonymous
Python Regex: принудительное жадное совпадение с использованием чередования

Сообщение Anonymous »

У меня есть регулярное выражение вида:

Код: Выделить всё

a(bc|de|def)g?
В строке adefg этот шаблон соответствует только до «ade» и явно завершается при первом совпадении в группе чередования. Удаление параметра ? из токена «g» позволяет шаблону соответствовать всей строке. Это имеет смысл, поскольку знак "?" не жадный. [РЕДАКТИРОВАНИЕ: меня поправили: "?" жадный, что, кажется, только усиливает мое замешательство. Мне показалось, что если "?" были нежадными, это позволяло шаблону завершить работу раньше, когда было доступно большее совпадение.]
Мне хотелось бы избежать изменения порядка строк при чередовании, и я могу решить проблему как есть, добавив (\b|$) к шаблону, но теперь мне действительно интересно узнать, есть ли другие решения
Например, есть ли способ сделать "?" жадный или заставить череду не выходить из игры при первом совпадении?

Вернуться в «Python»