training-web.ruГлавнаяКатегорииО насКарта сайтаПоискТёмная тема

Категории

Как проверить email-адрес регулярные выражения Python

Создано: 04 сентября 2017Автор: Егор Астапов5734 просмотраСложность: легкий

Валидация данных в 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.

  1. compile - метод для создания объект шаблона
  2. match - метод ищет совпадение по заданному шаблону. Поиск ведётся с начала строки
  3. search - возвращает одну найденную строку
  4. findall - метод возвращает список всех найденных совпадений
  5. sub - метод ищет шаблон в строке и заменяет его на указанную подстроку. Идеально подходит для замены неприличных слов в сообщений.
  6. group - метод выводит результат
  7. start - номер начальной позиции поиска
  8. 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 словно я роман\
 с продолженьем пишу
'''

Комментарии

Светлана: 29 апреля 2018 23:22:39
Спасибо!

Егор Астапов: 29 апреля 2018 23:49:54
Привет Светлана! Пожалуйста )

реклама