Найти тему
Властелин машин

4 правила работы с регулярными выражениями, о которых незаслуженно забывают

Оглавление

В этой статье речь пойдет о приемах, которые открывают двери в мир парсинга сложных строк, их использование может значительно сократить ваши муки при разборе таких конструкций.

Отмена вывода группы

Создадим демонстрационные строки, подключим библиотеку re и напишем простейшее регулярное выражение:

Как мы видим, все, что заключено в круглые скобки включается в итоговый вывод. Но так как эти скобки также используются для группировки выражений, такой поведение не всегда желательно. Если мы хотим отменить вывод следует после открывающейся скобки добавить два следующих символа ":?":

-2

Условный поиск

В регулярных выражениях можно задавать разные конструкции поиска в зависимости от нахождения шаблона. В общем виде это выглядит так:

(?(id или name шаблона)вариант1|вариант2)

Вот пример работы для наших двух строк в зависимости от наличия в них символов "г.":

-3

Обратите внимание, если убрать в строке s2 символ "-", то получим ошибку, так как регулярное выражение требует, чтобы при условии отсутствия "г." в строке имелось "":

-4

Именование частей

Исключительную пользу при работе со сложными регулярными выражениями представляет именование групп поиска, которое задается после открывающейся скобки символами "?P<имя>". Впоследствии именованные группы можно получить в виде словаря посредством метода groupdict. Перепишем способ поиска по условной конструкции с включением именования:

-5

Ссылки на поисковые вхождения

На группы вхождения можно ссылаться в последующих частях регулярного выражения, что полезно, например, при поиске в тегах. Для ссылки по id группы используется конструкция "\id", а по имени (?P=name):

-6

-7