Функция fullmatch() модуля re в Python с примерами

Содержание

Что такое функция полного соответствия регулярных выражений в Python?

Функция regex fullmatch() модуля re используется в Python для сопоставления всей строки с регулярным выражением. Она возвращает объект Match, если вся строка соответствует шаблону поиска регулярного выражения, или None в противном случае.

Синтаксис функции fullmatch() следующий:

re.fullmatch(pattern, string, flags=0)

В этом синтаксисе:

  • pattern определяет регулярное выражение для сопоставления.
  • string указывает входную строку.
  • Параметр flags является необязательным и по умолчанию равен нулю. Он принимает один или несколько флагов регулярных выражений и изменяет способ соответствия механизма регулярных выражений шаблону.

Пример с функцией fullmatch() в Python

В следующем примере функция fullmatch() используется для проверки адреса электронной почты:

import re

email = '[email protected]'
pattern = r'[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}'
match = re.fullmatch(pattern, email)

if match is not None:
    print(f'The email "{match.group()}" is valid')    
else:
    print(f'The email "{email}"" is not valid')

Выход:

The email "[email protected]" is valid

Ниже определяется функция, которая использует функцию fullmatch() для проверки адреса электронной почты. Она возвращает True, если электронное письмо действительно, или в противном случае вызывает исключение ValueError:

import re

def is_email(s: str) -> bool:
    pattern = r'[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}'
    if re.fullmatch(pattern, s) is None:
        raise ValueError(f'The {s} is not a valid email address')

    return True

И вы можете использовать функцию is_email() для проверки электронного письма следующим образом:

if __name__ == '__main__':
    try:
       if is_email('no-reply@pythontutorial'):
           print('The email is valid')
    except ValueError as e:
        print(e)

Выход:

The no-reply@pythontutorial is not a valid email address

Отличие fullmatch() от match() в Python

Функции fullmatch() и match() возвращают объект Match, если обнаруживают совпадение.

Функция fullmatch() сопоставляет всю строку с шаблоном, а функция match() находит совпадение только в начале строки.

См. следующий пример:

import re

s = 'Python 3'
pattern = 'Python'

# fullmatch
match = re.fullmatch(pattern, s)
if match is not None:
    print('fullmatch:', match.group())

# search
match = re.match(pattern, s)
if match is not None:
    print('match:', match.group())

Выход:

match: Python

В этом примере функция fullmatch() возвращает None, поскольку шаблон Python соответствует только началу строки, а не всей строке.

С другой стороны, функция match() сопоставляет шаблон в начале строки и возвращает совпадение.

Функция fullmatch() по сравнению с search() в Python

Функции fullmatch() и search() возвращают объект Match, если обнаруживают совпадение с шаблоном в строке. Однако функция fullmatch() соответствует всей строке, а функция search() — в любом месте строки.

Например:

import re

s = 'Python 3'
pattern = '\d'

# fullmatch
match = re.fullmatch(pattern,s)
if match is not None:
    print(match.group()) 

# search
match = re.search(pattern,s)
if match is not None:
    print(match.group()) # 3

Выход:

3

В этом примере шаблон \d соответствует одной цифре. Функция fullmatch() возвращает None, поскольку вся строка «Python 3» не соответствует.

Однако функция search() возвращает совпадение, поскольку ей удалось найти цифру 3 в конце строки.

Похожие посты
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *