Регулярные выражения
Регулярные выражения (regular expressions, или regex) — это мощный инструмент для работы с текстом, который позволяет искать, сопоставлять и заменять подстроки по определённым шаблонам. В Python для работы с регулярными выражениями используется модуль re
.
Основные функции модуля re
re.search()
— ищет первое совпадение с шаблоном в строке.re.match()
— ищет совпадение с шаблоном только в начале строки.re.findall()
— возвращает все совпадения с шаблоном в виде списка.re.finditer()
— возвращает итератор с объектами совпадений.re.sub()
— заменяет все совпадения с шаблоном на указанную строку.re.split()
— разбивает строку по шаблону.
Основные элементы регулярных выражений
.
— любой символ, кроме новой строки.\d
— любая цифра ([0-9]
).\D
— любой символ, кроме цифры.\w
— любая буква, цифра или нижнее подчёркивание ([a-zA-Z0-9_]
).\W
— любой символ, кроме букв, цифр и нижнего подчёркивания.\s
— любой пробельный символ (пробел, табуляция, новая строка).\S
— любой символ, кроме пробельных.[]
— набор символов. Например,[a-z]
— любая строчная буква.^
— начало строки.$
— конец строки.*
— 0 или более повторений.+
— 1 или более повторений.?
— 0 или 1 повторение.{n}
— ровноn
повторений.{n, m}
— отn
доm
повторений.|
— логическое "или". Например,a|b
—a
илиb
.
Примеры использования
Поиск совпадений с помощью re.search()
re.search()
ищет первое совпадение с шаблоном в строке.Шаблон
r"\+\d-\d{3}-\d{3}-\d{2}-\d{2}"
:\+
— символ+
(экранирован, так как+
имеет специальное значение в regex).\d
— любая цифра.-
— символ дефиса.\d{3}
— ровно 3 цифры.
match.group()
возвращает найденное совпадение.Если совпадение найдено, выводится номер телефона.
Поиск всех совпадений с помощью re.findall()
re.findall()
возвращает все совпадения с шаблоном в виде списка.Шаблон
r"\$\d+"
:\$
— символ$
(экранирован, так как$
имеет специальное значение в regex).\d+
— одна или более цифр.
Результат — список всех цен в тексте.
Замена с помощью re.sub()
re.sub()
заменяет все совпадения с шаблоном на указанную строку.Шаблон
r"\d{2}\.\d{2}\.\d{4}"
:\d{2}
— ровно 2 цифры (день или месяц).\.
— символ точки (экранирован, так как.
имеет специальное значение в regex).\d{4}
— ровно 4 цифры (год).
Все даты в тексте заменяются на
ДД.ММ.ГГГГ
.
Разделение строки с помощью re.split()
re.split()
разбивает строку по шаблону.Шаблон
r"[ ,;:]"
:[ ,;:]
— любой из символов: пробел, запятая, точка с запятой или двоеточие.
Результат — список слов, разделённых указанными символами.
Использование групп ()
Группы
()
позволяют извлекать части совпадений.Шаблон
r"Имя: (\w+), Возраст: (\d+)"
:(\w+)
— группа для имени (одна или более букв/цифр).(\d+)
— группа для возраста (одна или более цифр).
match.group(1)
возвращает первую группу (имя),match.group(2)
— вторую (возраст).
Использование re.match()
re.match()
ищет совпадение только в начале строки.Шаблон
r"Python"
:Ищет слово "Python" в начале строки.
Если совпадение найдено, выводится результат.
Использование re.finditer()
re.finditer()
возвращает итератор с объектами совпадений.Шаблон
r"\$\d+"
:Ищет цены в формате
$
+ цифры.
Каждое совпадение обрабатывается в цикле.
Валидация email с помощью регулярных выражений
Шаблон
r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$"
:^
— начало строки.[a-zA-Z0-9_.+-]+
— имя email (буквы, цифры, символы_
,.
,+
,-
).@
— символ "@".[a-zA-Z0-9-]+
— домен (буквы, цифры, дефисы).\.
— точка перед доменной зоной.[a-zA-Z0-9-.]+$
— доменная зона (буквы, цифры, точки, дефисы).
re.match()
проверяет, соответствует ли строка шаблону.
Извлечение всех хэштегов из текста
Шаблон
r"#\w+"
:#
— символ хэштега.\w+
— одна или более букв/цифр.
re.findall()
извлекает все хэштеги из текста.
Замена всех чисел в тексте
Шаблон
r"\d+"
:\d+
— одна или более цифр.
re.sub()
заменяет все числа наN
.
Регулярные выражения, непростая и очень интересная тема.
В этой лекции каждый пример демонстрирует возможности регулярных выражений для решения конкретных задач: поиск, замена, извлечение данных, валидация.
Регулярные выражения — это мощный инструмент, который требует практики для эффективного использования.