Серия руководств по регулярным выражениям с использованием Python

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

  1. Регулярные выражения: основы
  2. Регулярные выражения: группировка и символ вертикальной черты
  3. Регулярные выражения: повторение и жадное / не жадное сопоставление
  4. Регулярные выражения: классы символов и метод findall ()
  5. Регулярные выражения: точка-звезда и символы каретки / доллара
  6. Регулярные выражения: метод sub () и подробный режим

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

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

В этом фрагменте кода мы хотели искать номер телефона в строках. Сначала мы перебираем длину строки «сообщения», нарезаем сообщение от 0 до 12 символов и сохраняем его в переменной «кусок». Затем мы проверяем, соответствует ли этот фрагмент номеру телефона, а если нет, мы постепенно сдвигаем этот фрагмент и перебираем строку, пока не получим строку между символами 0–12, соответствующими номеру телефона.

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

Что такое регулярные выражения?

Регулярные выражения - это специально закодированные текстовые строки, используемые в качестве шаблонов для сопоставления наборов строк. Некоторые даже назвали их «подстановочными знаками» на стероидах. Знание того, как применять регулярные выражения, - это мощный инструмент. В какой-то момент вашей карьеры разработчика вы обнаружите, что работаете над программой, в которой вам нужно будет извлекать информацию из некоторого текста путем поиска одного или нескольких совпадений с определенным шаблоном поиска (то есть с определенной последовательностью ASCII или символы Unicode) и регулярное выражение могут сэкономить ваше время и сделать ваш код более эффективным.

Другие приложения, использующие регулярное выражение, включают проверку, синтаксический анализ / замену строк, передачу данных в другие форматы и очистку веб-страниц. Кроме того, синтаксис регулярных выражений во многом одинаков для всех языков программирования (с некоторыми незначительными отличиями).

В этой серии руководств по регулярным выражениям мы будем использовать Python. Поскольку мы используем Python, нам нужно импортировать встроенный модуль Python под названием re («re» относится к «регулярным выражениям»), Импорт этого модуля позволит нам начать работу с регулярным выражением.

ПРИМЕЧАНИЕ. Модули Python

Встроенные модули написаны на C и интегрированы с интерпретатором Python. Каждый встроенный модуль содержит ресурсы для определенных системных функций, таких как управление ОС, дисковый ввод-вывод и т. Д.

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

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

\d (represent a digits between 0-9)

к чему-то более сложному:

^(\(\d{3}\)|^\d{3}[.-]?)?\d{3}[.-]?\d{4}$

на этом мы и закончим после этой серии руководств по регулярным выражениям. Это довольно надежное регулярное выражение, которое соответствует 10-значному номеру телефона в Северной Америке.

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

Давайте перепишем функцию isPhoneNumber.py и повторим задачу с помощью регулярного выражения:

Давайте разбиваем этот фрагмент кода на одну строку за раз. Сначала мы импортировали модуль re, который позволяет нам работать с регулярными выражениями. Во-вторых, мы просто создали короткую строку, содержащую телефонные номера, которые мы хотим найти и проанализировать, и сохранили ее в переменной под названием «сообщение».

Теперь мы собираемся использовать метод из модуля re. Re.compile () позволяет создавать фактическое регулярное выражение (специальный текст, используемый в качестве шаблонов для сопоставления наборов строк).

re.compile(r’\d\d\d-\d\d\d-\d\d\d\d’)

Обычно перед созданием регулярного выражения мы сначала работаем со следующим: re.compile (r ’’)

r ’’ называется необработанной строкой, а в Python это то, в чем мы помещаем наш шаблон регулярного выражения. На данный момент все, что вам нужно знать, это то, что регулярное выражение вставлено в эту необработанную строку.

Во фрагменте кода вы увидите кучу элементов \ d, перемешанных вместе. \ d - это сокращенное обозначение символа, которое само по себе соответствует любому цифровому символу от 0 до 9.

Вы можете видеть, что мы повторяем \ d три и четыре раза подряд, что фактически соответствует тому же шаблону, которому следует номер телефона в Северной Америке. Дефисы в регулярном выражении вводятся как буквальные символы и будут сопоставлены как таковые.

После создания нашего шаблона регулярного выражения мы сохраним его в переменной с именем phoneNumRegex. Затем мы сохраним phoneNumRegex в mo - специальной переменной, возвращающей совпавший объект. Затем мы используем метод под названием group (). Сопоставленные объекты имеют групповой метод, который сообщает вам фактический найденный текст. Все эти методы регулярного выражения включены в модуль re.

ДЕЙСТВИЕ:

Взгляните на строку 5 во фрагменте кода. Если вы хотите найти все вхождения номера телефона в строке сообщение. Вы можете использовать метод findall (). Ваш код будет выглядеть так:

Ресурсы

Автоматизируйте скучную работу с помощью Python

Спасибо Элу Свигарту. У него есть курс по U demy и бесплатная онлайн-книга под названием: Автоматизация скучных вещей с помощью Python.

http://automatetheboringstuff.com/2e/

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

Regex One

Не стесняйтесь проверить эту ссылку, так как она отлично справляется с изучением различных компонентов Regex.

https://regexone.com/