Шпаргалка по регулярным выражениям в 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