Как работают группы захвата? (относительно регулярных выражений Python) - PullRequest
2 голосов
/ 14 мая 2009

Используя регулярное выражение для решения проблемы в Python Challenge , я столкнулся с поведением, которое меня смутило.

из здесь :

(...) Соответствует любому регулярному выражению, заключенному в скобки.

и

'+' Заставляет результирующий RE совпадать с 1 или более повторениями предыдущего RE.

Так что это имеет смысл:

>>>import re
>>>re.findall(r"(\d+)", "1111112")
['1111112']

Но это не так:

>>> re.findall(r"(\d)+", "1111112")
['2']

Я понимаю, что findall возвращает только группы, когда группы присутствуют в регулярном выражении, но почему возвращается только '2'? Что происходит со всеми 1 в матче?

Ответы [ 2 ]

10 голосов
/ 14 мая 2009

Поскольку у вас есть только одна группа захвата, но она «запускается» несколько раз, новые совпадения многократно вводятся в «пространство хранения» для этой группы. Другими словами, 1 s были потеряны, когда они были "перезаписаны" последующими 1 s и в конечном итоге 2.

1 голос
/ 14 мая 2009

Вы повторяете саму группу, добавляя '+' после ')', я не знаю подробностей реализации, но она соответствует 7 раз и возвращает только последнее совпадение.

В первом из них вы соответствуете 7 цифрам и составляете группу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...