Регулярные выражения

Регулярные выражения (англ. 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, но и в большинстве других языков программирования. В них стоит разобраться: они пригодятся в работе не раз и не два.





Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: