Шпаргалка по regex
Публичный
📌 Шпаргалка по Регулярным Выражениям (Regex)
Регулярные выражения — это мощный инструмент для поиска, замены и валидации шаблонов в тексте.
1. Введение и Основы 💡
| Элемент | Описание | Пример (Python) |
|---|---|---|
| Синтаксис | Шаблон заключается в слеши (в Python обычно используется префикс r для "сырых" строк: r"шаблон"). |
r"слово" |
| Флаги | Изменяют поведение поиска. В Python передаются как аргумент: re.search(pattern, text, flags=re.I). |
re.I (Ignore case), re.M (Multiline). В Python нет флага re.G — он реализован через re.findall() или re.finditer(). |
| Экранирование | Используется для поиска специальных символов как литералов (., *, ?, +, ( и т.д.). |
\. (точка), \( (открывающая скобка). |
2. Якоря и Границы ⚓
Якоря соответствуют позиции, а не самому символу.
| Якорь | Описание | Пример |
|---|---|---|
^ |
Начало строки (или линии при флаге m). |
^Начало |
$ |
Конец строки (или линии при флаге m). |
Конец$ |
\b |
Граница слова (переход между \w и \W). |
\bкот\b — найдёт "кот", но не "котлета". |
\B |
Не граница слова (внутри слова). | \Bот\B — найдёт "работ", но не "от". |
3. Символьные Классы и Метасимволы 📝
Соответствуют одному символу из набора.
| Синтаксис | Название | Соответствует |
|---|---|---|
. |
Точка | Любой символ (кроме \n, если не стоит флаг s). |
[abc] |
Пользовательский набор | a, b или c. |
[0-9] |
Диапазон | Цифра от 0 до 9. |
[^0-9] |
Исключение | Любому символу, кроме цифры. |
\d / \D |
Цифра / Не цифра | [0-9] / [^0-9] |
\w / \W |
Символ слова / Не символ слова | [a-zA-Z0-9_] / [^a-zA-Z0-9_] |
\s / \S |
Пробел / Не пробел | Пробел, табуляция, перевод строки. |
4. Квантификаторы (Повторение) 🔢
Определяют, сколько раз должен повториться предыдущий элемент.
| Квантификатор | Описание | Пример |
|---|---|---|
* |
Ноль или более (0+). | a* |
+ |
Одно или более (1+). | a+ |
? |
Ноль или одно (опционально). | a? |
{n} |
Ровно n повторений. |
\d{4} |
{n,} |
n или более. |
\d{3,} |
{n,m} |
От n до m повторений. |
\w{5,8} |
Жадность vs. Ленивость 🐌
-
Жадный (по умолчанию): захватывает максимально возможную строку.
-
Ленивый: добавьте
?после квантификатора —*?,+?,{n,m}?. -
Пример:
.*?— ноль или более любых символов (лениво).
5. Группировка, Логика и Ссылки 📦
| Синтаксис | Название | Назначение |
|---|---|---|
( ) |
Захватывающая группа | Группирует и сохраняет для обратных ссылок (\1, \2). |
| |
ИЛИ (логическое) | кошка|собака — найдёт "кошка" или "собака". |
(?: ) |
Незахватывающая группа | Группирует без сохранения (оптимизация). |
\n |
Обратная ссылка | Ссылка на содержимое n-й группы. |
| Пример | (\w+)\s+\1 |
Найдёт повторяющиеся слова: "hello hello". |
6. Просмотр вперёд/назад (Lookarounds) 👀
Утверждения нулевой ширины — проверяют условие, не включая его в результат.
| Синтаксис | Название | Проверка |
|---|---|---|
(?=...) |
Положительный просмотр вперёд | ... должно быть дальше. |
(?!...) |
Отрицательный просмотр вперёд | ... не должно быть дальше. |
(?<=...) |
Положительный просмотр назад | ... должно быть перед. |
(?<!...) |
Отрицательный просмотр назад | ... не должно быть перед. |
| Пример | \d+(?=р) |
Найдёт число перед буквой "р", но само "р" не войдёт в совпадение. |
7. Примеры кода на Python (Модуль re) 🐍
import re
text = "Телефоны: +7(903)123-4567 и 8 800 555 3535. Email: test@example.com."
pattern_email = r"[\w.-]+@[\w.-]+\.\w+"
pattern_phone = r"(\+7|8)[\s\(\-]*\d{3}[\s\)\-]*\d{3}[\s\-\/]*\d{2}[\s\-\/]*\d{2}"
# 1. re.search: Находит первое совпадение
match_email = re.search(pattern_email, text)
print(f"Первый Email: {match_email.group()}" if match_email else "Email не найден.")
# 2. re.findall: Находит все совпадения
phones = re.findall(pattern_phone, text)
print(f"Найденные номера (префиксы): {phones}") # Внимание: захватывается только (\+7|8)
# 3. re.sub: Замена
new_text = re.sub(r"Email: \S+", "Email: [СКРЫТО]", text)
print(f"Текст после замены: {new_text}")
# 4. Группировка и Обратные ссылки
name = "Смирнов, Алексей"
new_name = re.sub(r"(\w+)\s*,\s*(\w+)", r"\2 \1", name)
print(f"Имя-Фамилия: {new_name}") # → "Алексей Смирнов"
Лайк (
1
)
Дизлайк (
0
)
Создан: 2025-11-28
Обновлен: 2025-11-28 05:09