Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 23, 2017 14:16:51

lev-stas
Зарегистрирован: 2017-01-23
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

регулярное выражение для поиска e-mail

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

Офлайн

#2 Янв. 23, 2017 14:23:46

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

регулярное выражение для поиска e-mail

lev-stas
На первый взгляд самая тривиальная задача
Ох как ты тут не прав!

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

Если что, это не шутка, это страница стандарта



Офлайн

#3 Янв. 23, 2017 14:27:53

lev-stas
Зарегистрирован: 2017-01-23
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

регулярное выражение для поиска e-mail

Офлайн

#4 Янв. 23, 2017 14:29:44

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

регулярное выражение для поиска e-mail

Есть попроще
http://emailregex.com, но похуже



Офлайн

#5 Янв. 23, 2017 14:31:50

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2583
Репутация: +  60  -
Профиль   Отправить e-mail  

регулярное выражение для поиска e-mail

Use magic

https://gist.github.com/dideler/5219706



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#6 Янв. 23, 2017 14:37:18

lev-stas
Зарегистрирован: 2017-01-23
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

регулярное выражение для поиска e-mail

Юзается магия )) Спасибо, пошел разбирать ее по косточкам

Офлайн

#7 Янв. 23, 2017 16:48:50

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

регулярное выражение для поиска e-mail

не кидайтесь сильно если что то не так, но вопрос а разве так не пойдет без регулярки?

 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,

Офлайн

#8 Янв. 23, 2017 16:51:13

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2583
Репутация: +  60  -
Профиль   Отправить e-mail  

регулярное выражение для поиска e-mail

собака далеко не всегда указывает на эмейл



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#9 Янв. 23, 2017 17:04:47

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

регулярное выражение для поиска e-mail

ну получив все элементы с собакой можно же увидеть закономерность по которой можно отсеять лишнее ( ну допустим наличие точки возле @ или за @ символы отличные от букв) сдается мне и регулярка пропустит что то отличное от емейла если оно будет соответствовать заданной конструкции в регулярке

Отредактировано marvellik (Янв. 23, 2017 17:05:42)

Офлайн

#10 Янв. 23, 2017 17:37:56

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

регулярное выражение для поиска e-mail

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)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version