В этой статье мы узнаем о VERBOSE флаге package re и о том, как его использовать.
re.VERBOSE
: Этот флаг позволяет писать регулярные выражения, которые выглядят приятнее и более читабельны, позволяя визуально разделять логические разделы шаблона и добавлять комментарии.
Пробелы в шаблоне игнорируются, за исключением случаев, когда они находятся в классе символов, или когда им предшествует неэкранированная обратная косая черта, или в таких маркерах, как *?, (?: or (?P
. Если строка содержит символ#, который не относится к классу символов и которому не предшествует неэкранированная обратная косая черта, все символы от крайнего левого такого символа # до конца строки игнорируются.
# Without Using VERBOSE
regex_email = re.compile(r'^([a-z0-9_\.-]+)@([0-9a-z\.-]+)\.([a-z\.]{2, 6})$',
re.IGNORECASE)
# Using VERBOSE
regex_email = re.compile(r"""
^([a-z0-9_\.-]+) # local Part
@ # single @ sign
([0-9a-z\.-]+) # Domain name
\. # single Dot .
([a-z]{2,6})$ # Top level Domain
""",re.VERBOSE | re.IGNORECASE)
Это передается в качестве аргумента re.compile()
т. е. повторная компиляция (Регулярное выражение, re.VERBOSE). re.compile()
возвращает a Регулярное выражение объекта который затем сопоставляется с заданной строкой.
Давайте рассмотрим пример, когда пользователя просят ввести свой идентификатор электронной почты, и мы должны подтвердить его с помощью регулярного выражения. Формат электронного письма выглядит следующим образом:
- Личные данные/локальная часть, такая как john123
- Single @
- Доменное имя, например gmail/yahoo и т. д
- Одиночная точка(.)
- Домен верхнего уровня, например .com/.org/.net
Примеры:
Входные данные : expectopatronum@gmail.com
Вывод : Valid
Входные данные : avadakedavra@yahoo.com@
Вывод : Invalid
Это недопустимо, поскольку после доменного имени верхнего уровня стоит@.
Ниже приведена реализация Python:
# Python3 program to show the Implementation of VERBOSE in RegEX
import re
def validate_email(email):
# RegexObject = re.compile( Regular expression, flag )
# Compiles a regular expression pattern into
# a regular expression object
regex_email=re.compile(r"""
^([a-z0-9_\.-]+) # local Part
@ # single @ sign
([0-9a-z\.-]+) # Domain name
\. # single Dot .
([a-z]{2,6})$ # Top level Domain
""",re.VERBOSE | re.IGNORECASE)
# RegexObject is matched with the desired
# string using fullmatch function
# In case a match is found, search()
# returns a MatchObject Instance
res=regex_email.fullmatch(email)
#If match is found, the string is valid
if res:
print("{} is Valid. Details are as follow:".format(email))
#prints first part/personal detail of Email Id
print("Local:{}".format(res.group(1)))
#prints Domain Name of Email Id
print("Domain:{}".format(res.group(2)))
#prints Top Level Domain Name of Email Id
print("Top Level domain:{}".format(res.group(3)))
print()
else:
#If match is not found,string is invalid
print("{} is Invalid".format(email))
# Driver Code
validate_email("expectopatronum@gmail.com")
validate_email("avadakedavra@yahoo.com@")
validate_email("Crucio@.com")
Выход:
expectopatronum@gmail.com является Действительным. Подробности следующие:
Местный:expectopatronum
Домен:gmail
Домен верхнего уровня:com
avadakedavra@yahoo.com@ недопустимо
Crucio@.com является недействительным