Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 17, 2017 23:39:53

zzx1@R2D2
Зарегистрирован: 2017-03-26
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Как происходит перебор строки при использовании регулярных выражений?

Сегодня увидел пример выражения для выделения email из текста. Выражение такое:

 r'([\w\.-]+)@([\w\.-]+)(\.[\w\.]+)

Выражение кривоватое, но не в этом суть. Не могу понят вот чего:
 >>>pattern=r'([\w\.-]+)@([\w\.-]+)(\.[\w\.]+)'
>>>re.search(pattern, 'test contact abc@test-group.ru.com').groups()
('abc', 'test-group.ru', '.com')

Как устроен механизм перебора строки, что в последней группе оказывается ‘.com’, а не к примеру ‘.ru.com’ - в ней же точки предусмотрены, как и во второй группе?

Офлайн

#2 Апрель 18, 2017 01:37:33

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9999
Репутация: +  857  -
Профиль   Отправить e-mail  

Как происходит перебор строки при использовании регулярных выражений?

zzx1@R2D2
Как устроен механизм перебора строки
Он ищет с конца, подбирает эту последнюю группу в кратчайшем виде, потом подбирает остальные группы. Если он там остальные группы не подберёт, он эту последнюю группу удленнит снова до кратчайшего вида и опять остальные группы начнёт подбирать. Но так как остальные группы совпали сразу, то он останавливается.



Отредактировано py.user.next (Апрель 18, 2017 01:37:55)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version