Регулярные выражения (англ. regular expressions или regExp) — это самостоятельный язык, предназначенный для поиска строк и проверки их на соответствие какому-то шаблону.
Для поиска используется строка-образец (англ. pattern, по-русски её часто называют «шаблоном» или «маской»), определяющая правило поиска.
Символы в регулярном выражении могут:
- служить спецсимволами шаблона (например, точка в шаблоне regExp означает «любой символ в искомой строке»),
- указывать на символы, которые должны присутствовать в искомой строке (в email перед названием доменной зоны обязательно должна стоять точка, это один из признаков email).
Чтобы отличить «точку-спецсимвол regExp» от «точки — части искомой строки», во втором случае символ «экранируют» — ставят перед ним обратный слеш.
Вот недавно был случай: директор компании, разрабатывающей Kittygram, попросил секретаря найти email клиента. Имя клиента директор не помнит, а про email всего-то и известно, что тот был не длиннее 25 символов, состоял из латиницы и цифр и совершенно точно — на домене yandex, но на каком точно… «Нет, не помню, найдите все похожие!»
Секретарь выгружает список клиентов (а там пятнадцать тысяч строк) и идёт с этим списком и с печенькой к разработчикам.
Разработчики с благодарностью берут печеньку, этот страшный список и пишут регулярное выражение — шаблон, которому должна соответствовать искомая строка.
Шаблон для поиска адреса электронной почты в доменах yandex.ru, yandex.ua, yandex.by, yandex.com получился таким:
^
означает начало новой строки.[\w.\-]
— квадратные скобки объединяют набор возможных символов, которые могут находиться в начале строки. Среди этих символов могут быть:\w
— любые словообразующие символы: буквы от a до z и от A до Z, цифры от 0 до 9, знак подчёркивания;.
— символ «точка» (в квадратных скобках её не нужно экранировать);\-
— символ «дефис» (экранирован, значит, это символ, который может встретиться в строке).
{1,25}
указывает на то, что строка, состоящая из символов, перечисленных в квадратных скобках, может быть длиной от 1 до 25 знаков.- Элемент
(…)
объединяет варианты доменов, которые могут быть в строке, а разделяющий их символ|
соответствует оператору «или». $
означает окончание строки.
Разработчики честно заслужили печеньку: поиск выдал 18 адресов, и среди них директор легко нашёл нужный email. Happy end.
Специальные символы и примеры их использования:
Помимо специальных символов есть метасимволы, которые описывают группы символов в строке, например:
Полный перечень специальных символов и метасимволов можно посмотреть в документации Python.
Потренироваться в написании можно в онлайн-тренажёре, например вот тут: https://regex101.com/.
Синтаксис регулярных выражений стандартизирован и применяется не только в Python, но и в большинстве других языков программирования. В них стоит разобраться: они пригодятся в работе не раз и не два.