Оглавление

1. Поиск по шаблону с помощью регулярных выражений

Регулярные выражения, также известные как regexp или regex, представляют собой механизм для поиска и замены текста. Они используются разработчиками в коде приложений, тестировщиками в автотестах, а также при работе в командной строке.

Чем они лучше простого поиска? Они позволяют задать шаблон.

Например, у вас есть дата рождения в формате ДД.ММ.ГГГГ. Вам нужно передать ее дальше, но уже в формате ГГГГ-ММ-ДД. Как это сделать с помощью простого поиска? Ведь вы не знаете заранее, какая именно дата будет.

А регулярное выражение позволяет задать шаблон «найди мне цифры в таком-то формате».

1.1 Поиск образцов текста с помощью регулярных выражений

Регулярные выражения - это удобный инструмент для работы с текстом. Они позволяют описывать шаблоны, которые затем можно использовать для поиска и замены текста. Например, регулярное выражение \\d соответствует любой одиночной цифре от 0 до 9. Регулярное выражение \\d-\\d\\d\\d-\\d\\d\\d-\\d\\d-\\d\\d используется для нахождения текстовых строк формата: строка из трех цифр, дефис, еще три цифры, другой дефис и еще четыре цифры. Никакая другая строка не будет соответствовать этому регулярному выражению.

Регулярные выражения могут быть гораздо более сложными. Например, указав 3 в фигурных скобках ({3}) после шаблона, мы сообщаем следующее: "Искать троекратное соответствие этому шаблону". Поэтому корректному телефонному номеру будет соответствовать также следующий шаблон: \\d-\\d{3}-\\d{3}-\\d{2}-\\d{2}.

1.1.1 Создание объектов Regex

В Python все функции, предназначенные для работы с регулярными выражениями, содержатся в модуле re. Для работы с ним, его необходимо импортировать:

import re

Вызов метода re.compile() с передачей ему строкового значения, представляющего регулярное выражение, возвращает объект соответствующего регулярного выражения (или, как их принято называть, объект Regex).

<aside> 🔍 В Python для экранирования символов используется символ обратной косой черты (\). Строковое значение '\n' представляет одиночный символ новой строки, а не символ обратной косой черты, за которым следует строчная буква n. Чтобы вывести символ обратной косой черты, вам потребуется его экранировать (\\). Таким образом, строка '\\n' представляет символ обратной косой черты, за которым следует строчная буква n. Однако, поместив символ r перед первым апострофированным строковым значением, вы можете указать, что это "сырая" строка, в которой символы не экранированы.

Поскольку символы обратной косой черты часто используются в регулярных выражениях, удобно передавать методу re.compile() "сырые" строки, а не вводить дополнительные символы обратной косой черты. Ввести r’\\d-\\d\\d\\d-\\d\\d\\d-\\d\\d-\\d\\d" намного проще, чем "\\\\d-\\\\d\\\\d\\\\d-\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d".

</aside>

Чтобы создать объект Regex, совпадающий с шаблоном телефонного номера, необходимо выполнить следующий код:

phoneNumberRegex = re.compile(r'\\d{1}-\\d{3}-\\d{3}-\\d{2}-\\d{2}')

Теперь в переменной phoneNumberRegex содержится объект Regex.

1.1.2 Поиск соответствий объектам Regex

Метод search() объекта Regex ищет в переданной ему строке любые совпадения с регулярным выражением. В случае отсутствия в строке совпадений с регулярным выражением он возвращает значение None. Если совпадения были обнаружены, то метод возвращает объект Match. Объекты Match имеют метод group(), который возвращает найденные соответствия шаблону.