Найти - Пользователи
Полная версия: регулярное выражение для поиска e-mail
Начало » Центр помощи » регулярное выражение для поиска e-mail
1 2
lev-stas
Доброго времени суток! Помогите решить задачку, а то что-то зациклило в голове…
Нужно создать регулярное выражение для поиска адресов электронной почты в тексте. На первый взгляд самая тривиальная задача:
\w+@\w+\.\w+
Для адресов namename@xxx.yyy name_name@xxx.yyy отлично справляется
Но если попадается адрес в формате name-name@xxx.yyy с дефисом в имени, то возвращается только name@xxx.yyy, т.е. без первой части имени до дефиса. Специально пилить под имена с дефисом нельзя, потому как они редко встречаются…
Буду благодарен за помощь в решении.
FishHook
lev-stas
На первый взгляд самая тривиальная задача
Ох как ты тут не прав!

http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html

Если что, это не шутка, это страница стандарта
lev-stas
FishHook
Есть попроще
http://emailregex.com, но похуже
ZerG
Use magic

https://gist.github.com/dideler/5219706
lev-stas
Юзается магия )) Спасибо, пошел разбирать ее по косточкам
marvellik
не кидайтесь сильно если что то не так, но вопрос а разве так не пойдет без регулярки?
 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)

namename@xxx.yyy
name_name@xxx.yyy
name-name@xxx.yyy
name@xxx.yyy,
ZerG
собака далеко не всегда указывает на эмейл
marvellik
ну получив все элементы с собакой можно же увидеть закономерность по которой можно отсеять лишнее ( ну допустим наличие точки возле @ или за @ символы отличные от букв) сдается мне и регулярка пропустит что то отличное от емейла если оно будет соответствовать заданной конструкции в регулярке
FishHook
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
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