01 Проблема
Файл с 10 000 строк. Нужно найти все телефонные номера. Как?
❌ Вручную
Листать и искать глазами.
Часы работы, легко пропустить.
❌ Ctrl+F
Номера разные: 89161234567,
8-916-123-45-67, +7(916)999-88-77
✅ Регулярные выражения Один шаблон находит ВСЕ номера за секунду!
Попробуй · первая регулярка
Текст
Паттерн (регулярка)
Результат подсветки
findall()
import re
text = """Продажи: 89161234567
Бухгалтерия: 8-495-123-45-67
Директор: +7(916)999-88-77"""
phones = re.findall(r'[\d\-\+\(\)]{10,}', text)
print(phones)
# ['89161234567', '8-495-123-45-67', '+7(916)999-88-77']
02 Что такое регулярное выражение?
Регулярное выражение (regex) — шаблон для поиска текста. Как рецепт: описывает ЧТО искать, а не перечисляет все варианты.
| Задача |
Ctrl+F |
Regex |
| Найти «кот» |
✅ |
кот |
| Найти «кот» или «кит» |
❌ два поиска |
к[ои]т |
| Найти любое число |
❌ невозможно |
\d+ |
| Найти email |
❌ невозможно |
\w+@\w+\.\w+ |
Попробуй · regex vs обычный поиск
Текст
Паттерн
💡 Попробуй: к.от, \d+, \w+@\w+\.\w+
03 Модуль re
Для работы с регулярками в Python используется встроенный модуль:
import re # Эту строку пишем в начале программы
04 Raw-строки r'...'
Всегда пиши регулярки с буквой r перед кавычками:
# ✅ ПРАВИЛЬНО — raw-строка
pattern = r'\d+'
# ❌ НЕПРАВИЛЬНО — обычная строка
pattern = '\d+' # Может работать неправильно!
⚠️ Почему raw-строки? В обычных строках \ — спецсимвол (\n = перенос строки). В raw-строках \ остаётся просто символом. Без r Python может «съесть» обратный слеш и регулярка сломается.
Попробуй · raw vs обычная строка
Обычная строка: '\d'
Python видит: d
Слеш потерян!
Raw-строка: r'\d'
Python видит: \d
Всё правильно ✓
Шпаргалка модуля 1
| Термин |
Что значит |
| Регулярное выражение |
Шаблон для поиска текста |
import re |
Подключение модуля для работы с regex |
r'...' |
Raw-строка — всегда используй для паттернов |
re.findall(p, s) |
Найти все совпадения паттерна p в строке s |