Регулярные выражения в Python представляют собой мощный инструмент для поиска и обработки строк. Они позволяют выполнять сложные проверки формата, заменять и извлекать данные из текстовых строк с помощью шаблонов.

В Python для работы с регулярными выражениями используется модуль re. Этот модуль предоставляет различные функции для работы с регулярными выражениями, такие как:

  • re.match() — проверяет, соответствует ли строка шаблону, начиная с начала строки.
  • re.search() — ищет первое совпадение шаблона в строке.
  • re.findall() — находит все неперекрывающиеся совпадения шаблона в строке и возвращает их в виде списка.
  • re.finditer() — также находит все совпадения, но возвращает итератор, который генерирует объекты match.
  • re.sub() — заменяет все вхождения шаблона в строке на заданную подстроку.
  • re.split() — разбивает строку по шаблону.
  • re.compile() — компилирует регулярное выражение в объект, который можно использовать для выполнения различных операций.

Теперь рассмотрим, как использовать эти функции для проверки формата строк. Например, предположим, что мы хотим проверить, является ли строка почтовым адресом. Для этого мы можем использовать регулярное выражение, соответствующее формату почтовых адресов.

Пример кода:

import re

# Шаблон для проверки почтового адреса
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$'

# Функция для проверки формата почтового адреса
def is_valid_email(email):
    return re.match(pattern, email) is not None

# Примеры использования
emails = ['te**@ex*****.com', 'invalid-email', 'us**@do****.net']
for email in emails:
    if is_valid_email(email):
        print(f'{email} — корректный адрес')
    else:
        print(f'{email} — некорректный адрес')

В этом примере мы используем функцию re.match(), чтобы проверить, соответствует ли переданный email нашему шаблону. Если match возвращает None, значит адрес некорректен. В противном случае — корректен.

Другой пример — проверка формата номер телефона. Предположим, что номер должен состоять из 10 цифр:

# Шаблон для проверки номера телефона
phone_pattern = r'^d{10}$'

# Функция для проверки номера телефона
def is_valid_phone(phone):
    return re.match(phone_pattern, phone) is not None

# Примеры использования
phones = ['1234567890', '12345', 'abcdefghij']
for phone in phones:
    if is_valid_phone(phone):
        print(f'{phone} — корректный номер')
    else:
        print(f'{phone} — некорректный номер')

В этом коде мы используем шаблон, который определяет, что номер телефона должен состоять ровно из 10 цифр. Функция is_valid_phone проверяет, соответствует ли введенный номер этому шаблону.

Кроме проверки формата, регулярные выражения можно использовать для замены текста и извлечения данных. Например, если мы хотим заменить все вхождения слова «старый» на «новый», мы можем сделать это с помощью функции re.sub():

text = 'Это старый текст с несколькими старыми словами.'
new_text = re.sub(r'старый', 'новый', text)
print(new_text)  # Вывод: Это новый текст с несколькими новыми словами.

Как видно из примера, мы определяем шаблон для замены и передаем его в re.sub(), чтобы заменить все вхождения слова «старый» на «новый».

Также стоит отметить, что регулярные выражения могут быть сложными и содержать различные специальные символы. Например, символ . соответствует любому символу, а символы * и + указывают на количество вхождений. Для более сложных случаев можно использовать группировку с помощью скобок () и альтернативу с помощью символа |.

В заключение, регулярные выражения в Python предоставляют широкий спектр возможностей для проверки формата строк, замены и извлечения данных. Они являются неотъемлемой частью обработки текстовой информации и могут значительно упростить решение задач, связанных с текстом.