Регулярные выражения в Python: практическое применение | OTUS
Скидка до 15% на курсы ноября, декабря и января
❄️ До 20.12 Забрать скидку! →
Выбрать курс

Регулярные выражения в Python: практическое применение

Python_Deep_29.4-5020-a545c8.png

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

Если говорить простым языком, то регулярное выражение представляет собой последовательность символов, применяемых для поиска и замены текста в файле либо строке. При этом используются 2 типа символов: • спецсимволы. У них есть специальные значения, аналогично *, который обычно означает «любой символ»; • литералы (к примеру: a, b, 1, 2 и т. п.).

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

import re

На практике регулярные выражения чаще всего применяются для решения следующих задач: • поиск в строке; • разбиение строки на подстроки; • замена части строки.

Для решения вышеописанных задач библиотека re предоставляет ряд методов, вот самые популярные из них: • re.match() • re.search() • re.findall() • re.split() • re.sub() • re.compile()

Давайте посмотрим, как эти методы работают.

re.match(pattern, string)

Метод осуществляет поиск в начале строки по заданному шаблону. Вызвав match() на строке «AV Analytics AV» с шаблоном «AV», мы получим успешный результат поиска. Но если будем искать «Analytics», результат будет отрицательным. Давайте посмотрим, как метод работает:

import re
result = re.match(r'AV', 'AV Analytics Vidhya AV')
print result

Итог:

<_sre.SRE_Match object at 0x0000000009BE4370>

Итак, искомая подстрока найдена. Если мы хотим вывести её содержимое, пригодится метод group(). Обратите внимание, что мы применяем «r» перед строкой шаблона, дабы показать, что это «сырая» строка.

result = re.match(r'AV', 'AV Analytics Vidhya AV')
print result.group(0)

Итог:

AV

А теперь поищем в данной строке «Analytics». Но, как уже было сказано выше, т. к. строка начинается на «AV», результат будет отрицательный:

result = re.match(r'Analytics', 'AV Analytics Vidhya AV')
print result

Итог:

None

Кроме того, существуют методы start() и end(), позволяющие узнать начальную и конечную позиции найденной строки.

result = re.match(r'AV', 'AV Analytics Vidhya AV')
print result.start()
print result.end()

Итог:

0
2

Данные методы бывают весьма полезны при работе со строками.

re.search(pattern, string)

Этот метод схож с методом match(), однако он осуществляет поиск не только в начале строки. Результат будет положительным, даже если мы захотим найти «Analytics».

result = re.search(r'Analytics', 'AV Analytics Vidhya AV')
print result.group(0)

Итог:

Analytics

Таким образом, search() осуществляет поиск по всей строке, возвращая лишь первое найденное совпадение.

re.findall(pattern, string)

Следующий метод вернёт вам список всех найденных совпадений, то есть у него отсутствуют ограничения в плане начала или конца строки. Если будем искать «AV», вернутся все вхождения «AV»:

result = re.findall(r'AV', 'AV Analytics Vidhya AV')
print result

Итог:

['AV', 'AV']

re.split(pattern, string, [maxsplit=0])

Следующий метод разделяет строку по заданному шаблону.

result = re.split(r't', 'Analytics')
print result

Итог:

['Analy', 'ics']

В нашем примере мы разделили слово «Analytics» по букве «t». Кроме того, split() принимает аргумент maxsplit, значение которого по умолчанию равно 0. То есть мы сможем разделить строку на указанное количество частей.

Пример 1:

result = re.split(r'i', 'Analytics Vidhya')
print result

Результат:

['Analyt', 'cs V', 'dhya'] # все возможные части.

Пример 2:

result = re.split(r'i', 'Analytics Vidhya',maxsplit=1)
print result

Итог:

['Analyt', 'cs Vidhya']

re.sub(pattern, repl, string)

Данный метод осуществляет поиск шаблона в строке, заменяя его на указанную подстроку. При отсутствии шаблона строка не меняется.

result = re.sub(r'India', 'the World', 'AV is largest Analytics community of India')
print result

Итог:

'AV is largest Analytics community of the World'

re.compile(pattern, repl, string)

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

pattern = re.compile('AV')
result = pattern.findall('AV Analytics Vidhya AV')
print result
result2 = pattern.findall('AV is largest analytics community of India')
print result2

Итог:

['AV', 'AV']
['AV']

Итак, мы рассмотрели поиск определённой последовательности символов. Однако бывает, что у нас нет конкретного шаблона, а нам необходимо вернуть набор символов из строки, которая отвечает некоторым правилам (извлечь нужную информацию из строк). В таких ситуациях нам пригодятся специальные символы:

1-20219-dd6631.png

Дополнительную информацию о спецсимволах можно найти в официальной документации.

По материалам «Beginners Tutorial for Regular Expressions in Python».

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто
Новогодние скидки в Otus!-15% ❄️
Успейте забрать свою скидку до 20.12 →