Шпаргалка по регулярным выражениям в Python
Регулярные выражения — это мощный инструмент для поиска и обработки текста, основанный на специальных шаблонах. В Python их можно использовать с помощью встроенного модуля re
.
1import re
Для экранирования служебных символов используются два подхода:
- Обратный слэш (
\
) - Сырые строки (
r"..."
)
Основные функции работы с регулярными выражениями
re.match(r'шаблон', строка)
— Ищет совпадение с началом строки.re.search()
— Ищет первое совпадение в строке и возвращает объектmatch
.re.span()
— Возвращает кортеж с начальной и конечной позицией фрагмента.re.string()
— Возвращает исходную строку, переданную вre.search()
.re.group()
— Возвращает найденное совпадение.re.findall()
— Ищет все совпадения и возвращает их списком.re.split()
— Разделяет строку по указанному шаблону.re.sub()
— Заменяет найденный фрагмент в строке по шаблону.re.compile()
— Создает объект регулярного выражения для дальнейшего использования.
Основные синтаксические элементы
.
— Любой символ, кроме новой строки.^
— Начало строки.$
— Конец строки.*
— 0 или более вхождений.+
— 1 или более вхождений.?
— 0 или 1 вхождение.{n}
— Точное количество вхождений.{n,m}
— От n до m вхождений.[]
— Набор символов.\
— Экранирование символов.|
— Логическое ИЛИ.()
— Группировка выражений.[^...]
— Любой символ, кроме указанных в квадратных скобках.
Специальные символы
\w
— Любая буква, цифра или подчеркивание.\W
— Все, кроме букв, цифр и подчеркивания.\d
— Любая цифра (0-9).\D
— Любой нецифровой символ.\s
— Пробел или символ новой строки.\S
— Все, кроме пробельных символов.\A
— Начало строки.\Z
— Конец строки.\b
— Граница слова.\B
— Не граница слова.\n, \t, \r
— Новая строка, табуляция, возврат каретки.
Флаги регулярных выражений
g
(global) — Продолжает поиск совпадений после первого найденного.m
(multi-line) — Позволяет использовать^
и$
для начала и конца каждой строки в многострочном тексте.i
(insensitive) — Игнорирует регистр символов.
Простые примеры регулярных выражений
1. Поиск слов, начинающихся с буквы "a" и заканчивающихся на "z"
1import re
2
3pattern = r'a\w*z'
4text = "apple, azure, amazing, puzzle, jazz"
5result = re.findall(pattern, text)
6print(result) # ['azure', 'amazing']
\w*
— соответствует любым символам (буквы, цифры или подчеркивания) между буквами "a" и "z".
2. Поиск всех чисел в строке
1pattern = r'\d+'
2text = "Цены: 500 рублей, 3000 долларов и 45 евро."
3result = re.findall(pattern, text)
4print(result) # ['500', '3000', '45']
\d+
— ищет одно или более чисел.
3. Поиск слов, содержащих букву "e"
1pattern = r'\b\w*e\w*\b'
2text = "Hello there, welcome to the world of regex!"
3result = re.findall(pattern, text)
4print(result) # ['there', 'welcome', 'regex']
\b
— граница слова,\w*
— любые символы.
4. Поиск слов с определенной длиной
1pattern = r'\b\w{5}\b'
2text = "Apple is a fruit, and tiger is an animal."
3result = re.findall(pattern, text)
4print(result) # ['Apple', 'tiger']
\w{5}
— ищет слова длиной ровно 5 символов.
Сложные примеры регулярных выражений
1. Поиск и валидация номера телефона (формат: +7 (999) 123-45-67)
1pattern = r'\+7\s?\(\d{3}\)\s?\d{3}-\d{2}-\d{2}'
2text = "Мой номер: +7 (999) 123-45-67, и еще один номер +7(912)345-67-89."
3result = re.findall(pattern, text)
4print(result) # ['+7 (999) 123-45-67', '+7(912)345-67-89']
\+7
— ищет код страны.\(\d{3}\)
— код города, состоящий из 3 цифр в скобках.\d{3}-\d{2}-\d{2}
— основная часть номера телефона с дефисами.
2. Валидация электронной почты
1pattern = r'[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+'
2text = "Моя почта: [email protected], еще один адрес [email protected]."
3result = re.findall(pattern, text)
4print(result) # ['[email protected]', '[email protected]']
[a-zA-Z0-9_.+-]+
— имя пользователя, может содержать буквы, цифры, подчеркивания, точки и дефисы.@[a-zA-Z0-9-]+
— домен до точки, допускаются буквы и цифры.\.[a-zA-Z0-9-.]+
— доменная зона после точки, например.com
или.ru
.
3. Поиск IP-адресов (формат: 192.168.0.1)
1pattern = r'\b(?:\d{1,3}\.){3}\d{1,3}\b'
2text = "Серверы: 192.168.0.1, 10.0.0.255, 8.8.8.8."
3result = re.findall(pattern, text)
4print(result) # ['192.168.0.1', '10.0.0.255', '8.8.8.8']
\d{1,3}
— три цифры (или меньше).(?:\d{1,3}\.){3}
— повторяет блок цифр и точку 3 раза.\d{1,3}
— завершающий блок из одной, двух или трех цифр.
4. Поиск дат в формате (дд.мм.гггг)
1pattern = r'\b\d{2}\.\d{2}\.\d{4}\b'
2text = "Мероприятие состоится 25.12.2024, а предыдущая дата была 01.01.2023."
3result = re.findall(pattern, text)
4print(result) # ['25.12.2024', '01.01.2023']
\d{2}
— день и месяц в формате из двух цифр.\d{4}
— год в формате из четырех цифр.
5. Удаление всех HTML-тегов из текста
1pattern = r'<.*?>'
2html_text = "<div><h1>Заголовок</h1><p>Текст статьи</p></div>"
3clean_text = re.sub(pattern, '', html_text)
4print(clean_text) # ЗаголовокТекст статьи
<.*?>
— ищет все, что заключено в угловые скобки.
Эти примеры показывают, как можно использовать регулярные выражения для решения как простых, так и сложных задач, таких как валидация данных и обработка текста. Вы можете адаптировать эти шаблоны под свои нужды в зависимости от конкретной задачи.
Полезные ссылки
- Документация по регулярным выражениям в Python
- regexlearn.com — Учебный ресурс для изучения regex шаг за шагом.
- regex101.com — Онлайн-сервис для тестирования регулярных выражений.
comments powered by Disqus