Регулярные выражения: модуль re

Модуль re в Python: регулярные выражения для поиска, извлечения и замены текста — search, findall, sub и основные шаблоны.

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

Основные метасимволы

Символ

Значение

Пример

\d

цифра [0-9]

\d\d\d → «123»

\w

буква, цифра или _

\w+ → слово

\s

пробельный символ

\s+ → пробелы

.

любой символ кроме \n

a.c → «abc», «a1c»

+

один или более

\d+ → «1», «42», «100»

*

ноль или более

\d* → «», «5», «99»

?

ноль или один

colou?r → «color», «colour»

^

начало строки

^\d → строка начинается с цифры

$

конец строки

\d$ → строка заканчивается цифрой

re.search() — найти первое совпадение

import re

text = "Заказ №12345 принят 05.06.2024"

match = re.search(r'\d+', text)
if match:
    print("Найдено:", match.group())    # первое число
    print("Позиция:", match.start(), "-", match.end())

Вывод:

Найдено: 12345
Позиция: 7 - 12

Используйте r-строки для шаблонов: r'\d+'. В обычной строке обратный слеш нужно экранировать: '\\d+'. R-строка избавляет от двойных слешей.

re.findall() — найти все совпадения

import re

text = "Цены: 100 руб., 250 руб., 1490 руб."
numbers = re.findall(r'\d+', text)
print(numbers)

total = sum(int(n) for n in numbers)
print("Итого:", total, "руб.")

Вывод:

['100', '250', '1490']
Итого: 1840 руб.

re.sub() — замена по шаблону

import re

# Удалим все цифры из строки
text = "abc123def456"
result = re.sub(r'\d+', '', text)
print(result)

# Заменим несколько пробелов одним
messy = "Слова    с    лишними    пробелами"
clean = re.sub(r'\s+', ' ', messy)
print(clean)

Вывод:

abcdef
Слова с лишними пробелами

Группы захвата

Скобки () выделяют группу — фрагмент, который можно извлечь отдельно:

import re

log = "2024-06-05 ERROR Подключение не удалось"

match = re.search(r'(\d{4}-\d{2}-\d{2}) (\w+) (.+)', log)
if match:
    date   = match.group(1)
    level  = match.group(2)
    msg    = match.group(3)
    print(f"Дата: {date}")
    print(f"Уровень: {level}")
    print(f"Сообщение: {msg}")

Вывод:

Дата: 2024-06-05
Уровень: ERROR
Сообщение: Подключение не удалось

Коротко

  • re.search(pattern, text) — первое совпадение; re.findall() — список всех; re.sub() — замена.
  • Используйте r-строки для шаблонов: r'\d+'.
  • Скобки () создают группу захвата; извлекают через match.group(N).
  • Основные метасимволы: \d — цифра, \w — слово, \s — пробел, . — любой символ.
Проверьте себя
1. Что вернёт re.findall(r"\d+", "abc 12 def 345")?
A"12"
B["12"]
C["12", "345"]
DNone
2. Зачем использовать r-строки (r"\d+") для регулярных выражений?
AДля ускорения компиляции шаблона
BR-строки обязательны, иначе re выдаст ошибку
CЧтобы не экранировать обратный слеш дважды
DДля поддержки Unicode
3. Какая функция модуля re заменяет найденные совпадения?
Are.sub()
Bre.replace()
Cre.swap()
Dre.change()
4. Что означает метасимвол + в регулярном выражении?
AНоль или один символ
BРовно один символ
CНоль или более символов
DОдин или более символов

Закрепите практикой

Задачи с автоматической проверкой — решайте прямо здесь, не уходя из учебника.

py
Курс по теме
Пройдите курс «Python с нуля» — по шагам, с проверкой
8 уроков · ~14 ч · теория, упражнения и экзамен с бейджем
Открыть курс →