Я думал, что хотя группа была необязательной, ?
, что она все равно будет жадной и потребляющей персонажей, , если она может, прежде чем перейти к следующей части регулярного выражения.Почему моя факультативная группа не жадна? /(5)?.*/
Когда я указываю упрощенный регулярное выражение (5)?.*
против (5).*
(группа 1 не по желанию), я вижу другое поведение в Python 2.7.6, хотя я ожидал бы такое же поведение, используя ту же самую строку:
>>> import re
>>> s = 'before [5.5s] after'
>>> r = re.compile(r'(5)?.*')
>>> print r.search(s).groups()
(None,)
>>> r2 = re.compile(r'(5).*')
>>> print r2.search(s).groups()
('5',)
Что я не получу? Почему первое регулярное выражение, r
, а не всасывание 5?
Примечание: Я нужна теория почему, так как любая попытка решения это частности регулярное выражение не поможет мне. Это номер SSCCE. У меня более сложное регулярное выражение, и я действительно хочу заполнить пробел в своих знаниях относительно , почему необязательная группа не так жадна, как я бы подумал и хотел бы.
Люди никогда не перестанут задавать такие вопросы ... Поскольку '(5)?' Может соответствовать пустой строке, а так как механизм regex анализирует строку слева направо, '(5)?' Соответствует началу строка и '. *' соответствуют остальной части строки. –
И все же 're.compile ('(. *) (. *)'). Search ('abc'). Groups()' yields '('abc', '')'. Ты знаешь почему? –
'поиск' начинается с начала строки.Если он имеет совпадение (как в этих случаях), другие начальные индексы не учитываются. – myaut