Напишите более понятное регулярное выражение с дружественным декларативным синтаксисом

Regex, без сомнения, самый полезный из когда-либо изобретенных инструментов обработки текста. Это помогает нам находить в тексте закономерности, а не точные слова или фразы. И двигатели регулярных выражений тоже заметно быстрее.

Тем не менее, трудная часть состоит в том, чтобы определить шаблон. Опытные программисты могут определить его на ходу. Но большинству разработчиков придется потратить время на гугление и чтение документации.

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

Это проблема, которую решает PRegEx.

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

Вы можете установить его из репозитория PyPI.

pip install pregex
# Poetry users can install
# poetry add pregex 

Начните писать более читаемое регулярное выражение.

Вот пример понимания того, насколько крут PRegEx.

Широко распространена необходимость извлечения почтовых индексов (США) из адресов. Это несложно, если адреса стандартизированы. В противном случае нам нужно использовать некоторые умные методы для их извлечения.

Почтовые индексы США обычно представляют собой пятизначные числа. Кроме того, некоторые почтовые индексы могут иметь расширение из четырех цифр, разделенных дефисом.

Например, 88310 — это почтовый индекс в Нью-Мексико. Некоторые предпочитают использовать также географический сегмент с расширением, например, 88310–7241.

Вот типичный подход (с использованием модуля re) для поиска паттернов такого рода.

Шаги могут показаться простыми. Однако, если вы будете объяснять начинающему программисту, как вы определили шаблон, вам придется прочесть часовую лекцию.

Я тоже не буду объяснять. Потому что у нас есть PRegEx. Вот его версия для PRegEx.

Как видите, этот код прост для определения и понимания.

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

Изучите подмодули, чтобы создавать более интересные шаблоны регулярных выражений.

Здесь мы использовали пару подмодулей библиотеки PRegEx — классы и квантификаторы. Подмодуль «классы» определяет, что сопоставлять, а подмодуль квантификатора помогает указать, сколько повторений нужно выполнить.

Вы можете использовать другие классы, такие как AnyButDigit, для сопоставления нечисловых значений или AnyLowercaseLetter со строками нижнего регистра. Чтобы создать более сложные шаблоны регулярных выражений, вы также можете использовать различные квантификаторы, такие как OneOrMore, AtLeast, AtMost или Indefinite.

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

В приведенном выше примере мы использовали класс Capture из подмодуля «groups». Это позволяет нам собирать сегменты внутри совпадения, поэтому вам не нужно выполнять какую-либо постобработку для их извлечения.

Еще один подмодуль, который вам часто нужен, — это модуль оператора. Это поможет вам объединить шаблоны или выбрать один из наборов параметров.

Вот слегка измененная версия того же примера выше.

В приведенном выше примере мы ограничили домен верхнего уровня либо «.com», либо «.org». Мы использовали класс «Ether» из подмодуля оператора для построения этого шаблона. Как видите, он не совпадает с [email protected], поскольку его домен верхнего уровня — «.err», а не «.com» или «.org».

Последние мысли

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

Кроме того, регулярное выражение — отличный инструмент для анализа текста. Любой разработчик или исследователь данных почти наверняка столкнется с использованием регулярных выражений.

Если вы программист Python, PRegEx охватывает сложные части.

Спасибо за прочтение, друг! Передайте мне привет в LinkedIn, Twitter и Medium.

Еще не являетесь участником Medium? Пожалуйста, используйте эту ссылку, чтобы стать участником, потому что без каких-либо дополнительных затрат для вас я получаю небольшую комиссию за рекомендацию вас.