Регулярные выражения: модуль 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
Позиция: 8 - 13

Используйте 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", "345"]
C["12"]
DNone
2. Зачем использовать r-строки (r"\d+") для регулярных выражений?
AДля ускорения компиляции шаблона
BЧтобы не экранировать обратный слеш дважды
CR-строки обязательны, иначе re выдаст ошибку
DДля поддержки Unicode
3. Какая функция модуля re заменяет найденные совпадения?
Are.replace()
Bre.swap()
Cre.sub()
Dre.change()
4. Что означает метасимвол + в регулярном выражении?
AНоль или один символ
BРовно один символ
CОдин или более символов
DНоль или более символов

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

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

Поддержать проект