2017-01-23 3 views
-1

Я хочу найти действительные адреса электронной почты в текстовом файле, и это мой код:найти электронную почту, используя регулярное выражение питона

email = re.findall(r'[a-zA-Z\.-][email protected][\w\.-]+',line) 

Но мой код явно не содержит адреса электронной почты, где Есть номера до знака @ , И мой код не мог обрабатывать адреса электронной почты, у которых нет действительного окончания. Так может ли кто-нибудь помочь мне с этими двумя проблемами? Спасибо!

Пример моей проблемы было бы:

мой код может найти это сообщение: [email protected]

, но он не может найти это одно: [email protected]

И не можете фильтровать этот адрес электронной почты: xyz @ gmail

+2

Возможный дубликат [Проверка Python для действительного адреса электронной почты?] (Http://stackoverflow.com/questions/8022530/python-check-for-valid-email-address) – pna

ответ

1

Попробуйте validate_email.

pip install validate_email 

Тогда

from validate_email import validate_email 
is_valid = validate_email('[email protected]') 
+0

спасибо. Но могу ли я сделать это только путем регулярного выражения? Я предпочитаю использовать только регулярное выражение – Parker

1
^[\w-\.][email protected]([\w-]+\.)+[\w-]{2,4}$ 

Не моя, но я использовал его в приложениях раньше.

Source

+1

. Можете ли вы объяснить мне, что? - 'после w? – Parker

+0

Он точно соответствует символу '-', поэтому пользователи могут вводить что-то вроде [email protected]_. [Этот сайт] (https://regex101.com/) - отличный ресурс для изучения регулярного выражения и того, как работает каждый фрагмент. –

+0

спасибо. Сайт, который вы предоставили, действительно полезен – Parker

2

С python re docs, \w спичек любой алфавитно-цифровой символ и символ подчеркивания, что эквивалентно множеству [a-zA-Z0-9_]. Таким образом, [\w\.-] будет соответствующим образом соответствовать номерам, а также символам.

email = re.findall(r'[\w\.-][email protected][\w\.-]+(\.[\w]+)+',line) 

This post обсуждает соответствие адреса электронной почты гораздо более широко, и есть еще пара подводных камней вы бежите в соответствии адреса электронной почты, что ваш код не может его поймать. Например, адреса электронной почты не могут состоять полностью из знаков препинания ([email protected]). Кроме того, часто существует максимальная длина адресов, в зависимости от сервера электронной почты. Кроме того, многие почтовые серверы соответствуют неанглийским символам. Поэтому в зависимости от ваших потребностей вам может потребоваться более полная модель.