Найти - Пользователи
Полная версия: Как происходит перебор строки при использовании регулярных выражений?
Начало » Python для новичков » Как происходит перебор строки при использовании регулярных выражений?
1
zzx1@R2D2
Сегодня увидел пример выражения для выделения 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’ - в ней же точки предусмотрены, как и во второй группе?
py.user.next
zzx1@R2D2
Как устроен механизм перебора строки
Он ищет с конца, подбирает эту последнюю группу в кратчайшем виде, потом подбирает остальные группы. Если он там остальные группы не подберёт, он эту последнюю группу удленнит снова до кратчайшего вида и опять остальные группы начнёт подбирать. Но так как остальные группы совпали сразу, то он останавливается.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB