You are currently viewing Подробно в регулярном выражении Python

Подробно в регулярном выражении Python

В этой статье мы узнаем о 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 является недействительным