Форум сайта python.su
Доброго времени суток! Помогите решить задачку, а то что-то зациклило в голове…
Нужно создать регулярное выражение для поиска адресов электронной почты в тексте. На первый взгляд самая тривиальная задача:
“\w+@\w+\.\w+”
Для адресов namename@xxx.yyy name_name@xxx.yyy отлично справляется
Но если попадается адрес в формате name-name@xxx.yyy с дефисом в имени, то возвращается только name@xxx.yyy, т.е. без первой части имени до дефиса. Специально пилить под имена с дефисом нельзя, потому как они редко встречаются…
Буду благодарен за помощь в решении.
Офлайн
lev-stasОх как ты тут не прав!
На первый взгляд самая тривиальная задача
Офлайн
Офлайн
Есть попроще
http://emailregex.com, но похуже
Офлайн
Use magic
https://gist.github.com/dideler/5219706
Офлайн
Юзается магия )) Спасибо, пошел разбирать ее по косточкам
Офлайн
не кидайтесь сильно если что то не так, но вопрос а разве так не пойдет без регулярки?
text = '''Для адресов namename@xxx.yyy name_name@xxx.yyy отлично справляется Но если попадается адрес в формате name-name@xxx.yyy с дефисом в имени, то возвращается только name@xxx.yyy, т.е. без первой части имени до дефиса. Специально пилить под имена с дефисом нельзя, потому как они редко встречаются…''' for x in text.split(): if '@' in x: print(x)
Офлайн
собака далеко не всегда указывает на эмейл
Офлайн
ну получив все элементы с собакой можно же увидеть закономерность по которой можно отсеять лишнее ( ну допустим наличие точки возле @ или за @ символы отличные от букв) сдается мне и регулярка пропустит что то отличное от емейла если оно будет соответствовать заданной конструкции в регулярке
Отредактировано marvellik (Янв. 23, 2017 17:05:42)
Офлайн
marvellik
структура имейл адреса описывается довольно сложными правилами.Тот факт, что лично вам не встречались вычурные имейлы не значит, что их не бывает. Почитайте RFC 5322 или хотябы https://en.wikipedia.org/wiki/Email_address, я думаю у вас появится понимание проблемы, если вы узнаете, что вот это, например, допустимый имейл
"very.(),:;<>[]\".VERY.\"very@\\ \"very\".unusual"@strange.example.com
john..doe@example.com
"much.more unusual"@example.com
Отредактировано FishHook (Янв. 23, 2017 17:39:25)
Офлайн