Регулярные выражения в Python: практическое применение
Регулярные выражения — хороший инструмент для упорядочивания, поиска либо извлечения текстовых данных. В этой статье мы рассмотрим примеры их использования в Python.
Если говорить простым языком, то регулярное выражение представляет собой последовательность символов, применяемых для поиска и замены текста в файле либо строке. При этом используются 2 типа символов:
• спецсимволы. У них есть специальные значения, аналогично
В языке программирования Python для работы с регулярными выражениями существует модуль
import re
На практике регулярные выражения чаще всего применяются для решения следующих задач: • поиск в строке; • разбиение строки на подстроки; • замена части строки.
Для решения вышеописанных задач библиотека re предоставляет ряд методов, вот самые популярные из них: • re.match() • re.search() • re.findall() • re.split() • re.sub() • re.compile()
Давайте посмотрим, как эти методы работают.
re.match(pattern, string)
Метод осуществляет поиск в начале строки по заданному шаблону. Вызвав
import re result = re.match(r'AV', 'AV Analytics Vidhya AV') print result
Итог:
<_sre.SRE_Match object at 0x0000000009BE4370>
Итак, искомая подстрока найдена. Если мы хотим вывести её содержимое, пригодится метод
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
Кроме того, существуют методы
result = re.match(r'AV', 'AV Analytics Vidhya AV') print result.start() print result.end()
Итог:
0 2
Данные методы бывают весьма полезны при работе со строками.
re.search(pattern, string)
Этот метод схож с методом
result = re.search(r'Analytics', 'AV Analytics Vidhya AV') print result.group(0)
Итог:
Analytics
Таким образом,
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». Кроме того,
Пример 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']
Итак, мы рассмотрели поиск определённой последовательности символов. Однако бывает, что у нас нет конкретного шаблона, а нам необходимо вернуть набор символов из строки, которая отвечает некоторым правилам (извлечь нужную информацию из строк). В таких ситуациях нам пригодятся специальные символы:
Дополнительную информацию о спецсимволах можно найти в официальной документации.
По материалам «Beginners Tutorial for Regular Expressions in Python».