Python - удобный язык, который часто используется для написания сценариев, анализа данных и веб-разработки.

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

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

Регулярные выражения или регулярные выражения - это описания шаблона текста.

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

Чтобы использовать регулярные выражения для поиска текста, мы должны импортировать модуль re, а затем создать объект регулярного выражения со строкой регулярного выражения следующим образом:

import re
phone_regex = re.compile('\d{3}-\d{3}-\d{4}')

В приведенном выше коде есть регулярное выражение для поиска телефонного номера в Северной Америке.

Тогда, если у нас есть следующая строка:

msg = 'Joe\'s phone number is 555-555-1212'

Мы можем найти телефонный номер внутри msg с search методом объекта регулярного выражения следующим образом:

import re
phone_regex = re.compile('\d{3}-\d{3}-\d{4}')
msg = 'Joe\'s phone number is 555-555-1212'
match = phone_regex.search(msg)

Когда мы исследуем объект match, мы видим что-то вроде:

<re.Match object; span=(22, 34), match='555-555-1212'>

Затем мы можем вернуть строковое представление совпадения, вызвав метод group:

phone = match.group()

phone имеет значение '555-555-1212'.

Группировка в круглые скобки

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

Чтобы сделать это с нашим регулярным выражением номера телефона, мы можем написать:

phone_regex = re.compile('(\d{3})-(\d{3})-(\d{4})')

Затем, когда мы вызываем search, мы можем получить либо всю строку поиска, либо отдельные группы соответствий.

group принимает целое число, которое позволяет нам получить части, соответствующие группам.

Поэтому мы можем переписать нашу программу, чтобы получить полное совпадение и отдельные части телефонного номера следующим образом:

import re
phone_regex = re.compile('(\d{3})-(\d{3})-(\d{4})')
msg = 'Joe\'s phone number is 123-456-7890'
match = phone_regex.search(msg)
phone = match.group()
area_code = match.group(1)
exchange_code = match.group(2)
station_code = match.group(3)

В приведенном выше коде phone должно быть ‘123–456–7890’, поскольку мы ничего не передали в group. Передача 0 также возвращает то же самое.

area_code должно быть '123', поскольку мы передали 1 в group, который возвращает первое совпадение группы.

exchange_code должно быть '456', поскольку мы передали 2 в group, который возвращает совпадение 2-й группы.

Наконец, station_code должно быть '7890', поскольку мы передали 3 в group, который возвращает совпадение третьей группы.

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

Сопоставление нескольких групп с трубой

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

Например, чтобы получить совпадение, мы пишем следующее:

import re
name_regex = re.compile('Jane|Joe')
msg = 'Jane and Joe'
match = name_regex.search(msg)
match = match.group()

match должно быть 'Jane', поскольку это первое совпадение, найденное в соответствии с регулярным выражением.

Мы можем комбинировать вертикальные черты и круглые скобки, чтобы найти часть строки. Например, мы можем написать следующий код:

import re
snow_regex = re.compile(r'snow(man|mobile|shoe)')
msg = 'I am walking on a snowshoe'
snow_match = snow_regex.search(msg)
match = snow_match.group()
group_match = snow_match.group(1)

чтобы получить полное совпадение с match, имеющим значение 'snowshoe'.

group_match должно иметь частичное совпадение группы, равное 'shoe'.

Необязательное соответствие с вопросительным знаком

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

Например, мы можем написать:

import re
snow_regex = re.compile(r'snow(shoe)?')
msg = 'I am walking on a snowshoe'
msg_2 = 'I am walking on snow'
snow_match = snow_regex.search(msg)
snow_match_2 = snow_regex.search(msg_2)

Затем snow_match.group() возвращает 'snowshoe', а snow_match.group(1) возвращает 'shoe'.

Поскольку группа (shoe) является необязательной, snow_match_2.group() возвращает 'snow', а snow_match_2.group(1) возвращает None.

Заключение

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

В Python мы можем использовать модуль re для создания объекта регулярного выражения из строки.

Затем мы можем использовать его для поиска методом search.

Мы можем определять группы с помощью круглых скобок. Как только мы это сделаем, мы можем вызвать group для объекта соответствия, возвращаемого search.

Группа возвращается, когда мы передаем целое число, чтобы получить его по их позиции.

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

Примечание от Python In Plain English

Мы всегда заинтересованы в продвижении качественного контента. Если у вас есть статья, которую вы хотите отправить в какую-либо из наших публикаций, отправьте нам электронное письмо по адресу [email protected] с вашим именем пользователя Medium, и мы добавим вас в качестве автора.