Как проверить email-адрес регулярные выражения Python
Валидация данных в python - это важное дело. Если не будет валидации, то придётся писать массу скриптов, которые будут исправлять данные. Очень часто приходится руками менять неверные данные. Если еmail-адрес с ошибкой, то вы не сможете послать на него письмо. Тут ошибок не должно быть!
Нам поможет модуль re с регулярными выражениями. Подробнее о модуле re написано в статье поиск значений регулярные выражения Python. Он довольно гибкий. Мы будем проверять email при помощи регулярных выражений.
#!/usr/bin/python3
from re import *
def get_address():
'''
проверка email по шаблону
'''
pattern = compile('(^|\s)[-a-z0-9_.]+@([-a-z0-9]+\.)+[a-z]{2,6}(\s|$)')
address = input('inter you email address:')
is_valid = pattern.match(address)
if is_valid:
print('правильный email:', is_valid.group())
# объект is_valid содержит 3 метода
print('методы: start:', is_valid.start(), 'end:',\
is_valid.end(), 'group:', is_valid.group())
else:
print('неверный email! введите email...\n')
get_address()
'''
ввел правильный email ya@yandex.ru
вывод:
inter you email address:ya@yandex.ru
правильный email: ya@yandex.ru
методы: start: 0 end: 12 group: ya@yandex.ru
ввел неправильный email ya.ya.ru
вывод:
inter you email address:ya.ya.ru
неверный email! введите email...
'''
Как работает эта функция? Вам нужно запустить скрипт. Потом консоль попросит ввести email. Введите правильный email-адрес. Посмотрите на результат. Затем введите неправильный email.
- compile - метод для создания объект шаблона
- match - метод ищет совпадение по заданному шаблону. Поиск ведётся с начала строки
- search - возвращает одну найденную строку
- findall - метод возвращает список всех найденных совпадений
- sub - метод ищет шаблон в строке и заменяет его на указанную подстроку. Идеально подходит для замены неприличных слов в сообщений.
- group - метод выводит результат
- start - номер начальной позиции поиска
- end - номер последней позиции поиска
Небольшая шпаргалка по символам для шаблона.
Символ | Описание |
---|---|
. | Один любой символ, кроме новой строки \n. |
? | 0 или 1 вхождение шаблона слева |
+ | 1 и более вхождений шаблона слева |
* | 0 и более вхождений шаблона слева |
\w | Любая цифра или буква (\W — все, кроме буквы или цифры) |
\d | Любая цифра [0-9] (\D — все, кроме цифры) |
\s | Любой пробельный символ (\S — любой непробельный символ) |
\b | Граница слова |
[..] | Один из символов в скобках ([^..] — любой символ, кроме тех, что в скобках) |
\ | Экранирование специальных символов (\. означает точку или \+ — знак «плюс») |
^ и $ | Начало и конец строки соответственно |
{n,m} | От n до m вхождений ({,m} — от 0 до m) |
a|b | Соответствует a или b |
() | Группирует выражение и возвращает найденный текст |
\t, \n, \r | Символ табуляции, новой строки и возврата каретки соответственно |
Посмотрите на примеры.
#!/usr/bin/python3
import re
# поиск одного email
str='письма на почту r.e.egor@yandex.domen1.domen2.ru ношу словно я роман\
с продолженьем пишу'
match = re.search(r'[\w.-]+@[\w.-]+\.?[\w]+?', str)
print(match.group())
'''
вывод:
r.e.egor@yandex.domen1.domen2.ru
'''
print('-'*30)
# поиск нескольких email
str2='письма на почту egor@yandex.ru ношу словно anton@g.mail.ru словно я роман\
с продолженьем пишу'
mail = re.findall(r'[\w.-]+@[\w.-]+\.?[\w]+?', str2)
print(mail)
'''
вывод:
['egor@yandex.ru', 'anton@g.mail.ru']
'''
print('-'*30)
# результаты выводятся в кортежах
str3='письма на почту egor@yandex.ru ношу словно anton@g.mail.ru словно я роман\
с продолженьем пишу'
mail = re.findall(r'([\w.-]+)@([\w.-]+\.?[\w]+?)', str3)
print(mail)
'''
вывод:
[('egor', 'yandex.ru'), ('anton', 'g.mail.ru')]
'''
print('-'*30)
# массовая замена
str4='письма на почту egor@yandex.ru ношу словно anton@g.mail.ru словно я роман\
с продолженьем пишу'
mail = re.sub(r'([\w.-]+)@([\w.-]+\.?[\w]+?)', r'\1@supermail.com', str4)
print(mail)
'''
вывод:
письма на почту egor@supermail.com ношу словно anton@supermail.com словно я роман\
с продолженьем пишу
'''