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

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

Введение

Регулярные выражения — мощный инструмент для работы с текстовыми данными, позволяющий производить сложные операции по их анализу и обработке. Применение регулярных выражений в Python возможно благодаря встроенной библиотеке re. В этой статье мы рассмотрим, что такое регулярные выражения, основные понятия и синтаксис, а также примеры использования для реальных задач.

Основные понятия регулярных выражений

Что такое регулярное выражение?

Регулярное выражение (regex) — это шаблон, который используется для поиска и манипуляции подстрок в тексте. Оно позволяет определить шаблоны для поиска, замены или извлечения данных из строк.

Синтаксис регулярных выражений

Регулярные выражения состоят из специальных символов, которые имеют определенное значение:

  • . — любой одиночный символ
  • * — предыдущее выражение повторяется 0 и более раз
  • + — предыдущее выражение повторяется 1 и более раз
  • ? — предыдущее выражение повторяется 0 или 1 раз
  • ^ — начало строки
  • $ — конец строки
import re

pattern = r'^hello.*world$'
text = 'hello, beautiful world'
result = re.match(pattern, text)  # матч будет успешным

Классы символов

Классы символов позволяют задавать наборы символов, которые могут подходить под один элемент шаблона:

  • [a-z] — любой символ от ‘a’ до ‘z’
  • [0-9] — любая цифра от 0 до 9
  • \d — любая цифра (эквивалентно [0-9])
  • \D — любой нецифровой символ
import re

pattern = r'\d{3}-\d{2}-\d{4}'
text = '123-45-6789'
result = re.match(pattern, text)  # матч будет успешным

Импортируем нужные библиотеки

Библиотека re — основная библиотека Python для работы с регулярными выражениями. Подключить её можно простым импортом:

import re

Основные функции модуля re

re.match()

Функция match ищет совпадение только в начале строки.

import re

def example_match(pattern: str, text: str) -> None:
    result = re.match(pattern, text)
    if result:
        print(f"Matched: {result.group()}")
    else:
        print("No match")

example_match(r'hello', 'hello, world')

re.search()

Функция search ищет совпадение по всей строке.

import re

def example_search(pattern: str, text: str) -> None:
    result = re.search(pattern, text)
    if result:
        print(f"Found: {result.group()}")
    else:
        print("Not found")

example_search(r'world', 'hello, world')

re.findall()

Функция findall возвращает список всех найденных совпадений.

import re

def example_findall(pattern: str, text: str) -> list[str]:
    return re.findall(pattern, text)

emails = example_findall(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b', 'Contact me at email@example.com or admin@example.net')
print(emails)

re.sub()

Функция sub заменяет все совпадающие подстроки другой строкой.

import re

def example_sub(pattern: str, repl: str, text: str) -> str:
    return re.sub(pattern, repl, text)

censored = example_sub(r'\b\d+\b', '[NUMBER]', 'My phone number is 12345')
print(censored)

re.split()

Функция split разбивает строку по заданному шаблону.

import re

def example_split(pattern: str, text: str) -> list[str]:
    return re.split(pattern, text)

words = example_split(r'\W+', 'One, two, three; go!')
print(words)

Примеры использования регулярных выражений

Поиск email-адресов

import re

def find_emails(text: str) -> list[str]:
    pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
    return re.findall(pattern, text)

emails = find_emails('Emails: first@example.com, second@sample.net')
print(emails)

Валидация телефонного номера

import re

def validate_phone(phone: str) -> bool:
    pattern = r'^\+?[1-9]\d{1,14}$'
    return bool(re.match(pattern, phone))

print(validate_phone('+1234567890'))
print(validate_phone('123-45-6789'))

Извлечение данных из строк

import re

def extract_hashtags(text: str) -> list[str]:
    pattern = r'#(\w+)'
    return re.findall(pattern, text)

hashtags = extract_hashtags('Use #Python and #regex for text processing')
print(hashtags)

Типизация данных в регулярных выражениях

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

def find_emails(text: str) -> list[str]:
    # ...
    pass

Подводя итоги

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

Заключение

Для дальнейшего изучения регулярных выражений в Python рекомендуется ознакомиться с официальной документацией и ресурсами, такими как Python документация по re и Regular-Expressions.info.


Добавить комментарий