Говоря простым языком, регулярное выражение — это последовательность символов, используемая для поиска и замены текста в строке или файле. Как уже было упомянуто, их поддерживает множество языков общего назначения: Python, Perl, R. 

Регулярные выражения используют два типа символов:

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

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

Чаще всего регулярные выражения используются для:

  • поиска в строке;
  • разбиения строки на подстроки;
  • замены части строки.

Давайте посмотрим на методы, которые предоставляет библиотека re для этих задач. Вот наиболее часто используемые из них:

  • re.match()
  • re.search()
  • re.findall()
  • re.split()
  • re.sub()
  • re.compile()

Рассмотрим их подробнее.

 re.match(pattern, string):

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

Результат:

Искомая подстрока найдена. Чтобы вывести ее содержимое, используем метод group(). (Мы используем «r» перед строкой шаблона, чтобы показать, что это «сырая» строка в Python).

Результат:

Теперь попробуем найти «Analytics» в данной строке. Поскольку строка начинается на «AV», метод вернет None:

Результат:

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

Результат:

Эти методы иногда очень полезны для работы со строками.

re.search(pattern, string):

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

Результат:

Метод search() ищет по всей строке, но возвращает только первое найденное совпадение.

re.findall(pattern, string):

Этот метод возвращает список всех найденных совпадений. У метода findall() нет ограничений на поиск в начале или конце строки. Если мы будем искать «AV» в нашей строке, он вернет все вхождения «AV». Для поиска рекомендуется использовать именно findall(), так как он может работать и как re.search(), и как re.match().

Результат:

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

Этот метод разделяет строку по заданному шаблону.

Результат:

В примере мы разделили слово «Analytics» по букве «y». Метод split() принимает также аргумент maxsplit со значением по умолчанию, равным 0. В данном случае он разделит строку столько раз, сколько возможно, но если указать этот аргумент, то разделение будет произведено не более указанного количества раз. Давайте посмотрим на примеры:

Результат:

Результат:

Мы установили параметр maxsplit равным 1, и в результате строка была разделена на две части вместо трех.

re.sub(pattern, repl, string):

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

Результат:

re.compile(pattern, repl, string):

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

Результат:

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

Таблица спецсимволов

Текст заголовка Текст заголовка
. Один любой символ, кроме новой строки \n.
 ? 0 или 1 вхождение шаблона слева
+ 1 и более вхождений шаблона слева
* 0 и более вхождений шаблона слева
\w Любая цифра или буква (\W — все, кроме буквы или цифры)
\d Любая цифра [0-9] (\D — все, кроме цифры)
\s Любой пробельный символ (\S — любой непробельнй символ)
\b Граница слова
[..] Один из символов в скобках ([^..] — любой символ, кроме тех, что в скобках)
\ Экранирование специальных символов (\. означает точку или \+ — знак «плюс»)
^ и $ Начало и конец строки соответственно
{n,m} От n до m вхождений ({,m} — от 0 до m)
b Соответствует a или b
() Группирует выражение и возвращает найденный текст
\t, \n, \r Символ табуляции, новой строки и возврата каретки соответственно

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

20 + три =