Как использовать регулярные выражения (Regex) в Python

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

Попробуйте это решение в редакторе

Обзор

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

Модуль `re` предлагает несколько основных функций в зависимости от вашей цели. Функция `re.search(pattern, string)` сканирует строку и возвращает объект соответствия для первого вхождения шаблона. Функция re.match(pattern, string) аналогична, но ищет только с самого начала строки. Если вы хотите получить все экземпляры шаблона в текстовом блоке, re.findall(pattern, string) возвращает их в виде списка строк.

В шаблонах регулярных выражений используются специальные метасимволы, такие как `\d` для цифр, `\w` для буквенно-цифровых символов, `+` для одного или нескольких вхождений и `*` для нуля или более. При написании регулярных выражений в Python стандартной практикой является использование необработанных строковых литералов (с префиксом `r`, например `r"\d+"`), чтобы Python не обрабатывал обратную косую черту как escape-последовательности.

Код и вывод выполнения

Этот сценарий демонстрирует проверку структур формата, извлечение числовых токенов и замену совпадающих шаблонов с помощью модуля re.

import re

# 1. Searching for a pattern in text
log_message = "ERROR: Connection timeout at 04:30:15 on port 8080"
pattern_port = r"port \d+"

match = re.search(pattern_port, log_message)
if match:
    print("Found port pattern:", match.group())

# 2. Extracting all email addresses from a block of text
text = "Contact sales@pyrun.xyz or support@example.com for help."
pattern_email = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"

emails = re.findall(pattern_email, text)
print("Extracted emails:", emails)

# 3. Replacing patterns using re.sub
date_string = "2026/05/25"
# Replace slashes with dashes
clean_date = re.sub(r"/", "-", date_string)
print("Replaced Date:", clean_date)
Терминальный выход
Found port pattern: port 8080
Extracted emails: ['sales@pyrun.xyz', 'support@example.com']
Replaced Date: 2026-05-25

Пошаговая реализация

  • Импортируйте встроенный модуль re.
  • Определите шаблоны поиска по регулярным выражениям, используя необработанные строки, например r"\d+", чтобы избежать проблем с escape-последовательностью.
  • Используйте re.search(), чтобы найти первое вхождение, или re.findall(), чтобы собрать все совпадающие подстроки.
  • Используйте re.sub(шаблон, замена, строка) для выполнения замен внутри текста на основе шаблона.

Часто задаваемые вопросы

В чем преимущество использования необработанных строк (r"...") для шаблонов регулярных выражений?

Необработанные строки рассматривают обратную косую черту как буквальные символы, а не escape-символы. Например, r"\n" представляет собой обратную косую черту, за которой следует "n", тогда как "\n" представляет собой символ новой строки.

Как проверить, было ли совпадение с регулярным выражением успешным?

re.search() и re.match() возвращают объект совпадения в случае успеха или None, если совпадение не найдено. Вы должны проверить результат, используя условный оператор (например, if match:).

Связанные темы

Рекомендуемые ресурсы Python

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