Пакет re: re.match, re.findall, re.split. и re.sub

Здравствуйте, любители НЛП! Сегодня мы углубимся в важную тему NLP, которая касается эффективного извлечения текстовых шаблонов из текстов, а именно регулярных выражений. Наслаждаться! 😄

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

Регулярное выражение (также известное как регулярное выражение или регулярное выражение) — это последовательность символов, которая задает шаблон поиска в тексте. Обычно такие шаблоны используются алгоритмами поиска строк ​​для операций найти или найти и заменить над строками или для проверки ввода.

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

Варианты использования регулярных выражений

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

  • Предварительная обработка данных;
  • Системы добычи информации на основе правил;
  • сопоставление с образцом;
  • Текстовая функция Инженерия;
  • веб-скрапинг;
  • Валидация данных;
  • Извлечение данных.

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

Регулярные выражения с Python

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

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

Основные персонажи

Прежде всего, можно искать вхождения шаблона в строку, используя функцию search модуля re. Эта функция возвращает объект сопоставления, содержащий совпадающую подстроку (или None, если она не существует) и ее позицию внутри исходной строки.

При указании шаблона регулярного выражения мы обычно добавляем перед ним символ r, что означает, что строка должна рассматриваться как необработанная строка и, следовательно, все escape-коды будут игнорироваться. Например, "\n" — это строка с символом \n, тогда как r"\n" — это строка с символами \ и n.

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

  • ^ : Соответствует выражению справа от него в начале строки до того, как будет найден разрыв строки;
  • $ : Соответствует выражению слева от него в конце строки до того, как будет найден разрыв строки;
  • .: соответствует любому символу, кроме новой строки;
  • a : соответствует ровно одному символу a ;
  • ab : соответствует строке ab .

Функции регулярных выражений

В этом разделе мы видим другие основные функции, обычно используемые модулем re.

Функция match похожа на search, но она только пытается сопоставить шаблон в начале целевой строки.

Функции findall и finditer ищут все совпадения с шаблоном в целевой строке (тогда как search и match ищут только первое вхождение). Первый возвращает список, а второй возвращает итератор.

Функции sub и subn находят шаблоны в целевой строке и заменяют их другой строкой. Функция sub заменяет только первое вхождение шаблона, а subn заменяет первые n вхождения.

Функция compile компилирует регулярное выражение в объект регулярного выражения, что обеспечивает кэширование и более быстрое сопоставление с образцом. Функция split похожа на функцию разделения Python, но разделяется в соответствии с шаблонами регулярных выражений.

квантификаторы

Давайте теперь посмотрим, как использовать квантификаторы:

  • a|b : Соответствует выражению a или b. Если a соответствует первому, b не проверяется;
  • + : Соответствует выражению слева от него 1 или более раз;
  • * : Соответствует выражению слева от него 0 или более раз;
  • ? : Соответствует выражению слева от него 0 или 1 раз.
  • {p} : соответствует выражению слева ровно p раз;
  • {p, q} : Соответствует выражению слева от него от p до q раз;
  • {p, } : соответствует выражению слева от него p или более раз;
  • {, q} : Соответствует выражению слева до q раз.

Классы персонажей

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

  • \w : Соответствует буквенно-цифровым символам, то есть az, A-Z, 0–9 и символу подчеркивания (_);
  • \W : Соответствует не буквенно-цифровым символам, кроме a-z, A-Z, 0–9 и _;
  • \d : Соответствует цифрам от 0 до 9;
  • \D : Соответствует любым нецифрам;
  • \s : Соответствует пробельным символам, которые также включают \t, \n, \r и пробельные символы;
  • \S : Соответствует непробельным символам.
  • \n: соответствует символу новой строки;
  • \t: соответствует символу табуляции;
  • \b: соответствует границе слова (или пустой строке) в начале и в конце слова;
  • \B : Соответствует там, где \b не соответствует, это не граница слова.

Наборы

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

  • [abc] : соответствует a, b или c. Не соответствует abc;
  • [a-z]: соответствует любому алфавиту от a до z;
  • [A-Z] : Соответствует любому заглавному алфавиту от A до Z;
  • [a\-p] : Соответствует a, - или p. Он соответствует, потому что \ ускользает от него;
  • [-z] : Соответствует - или z;
  • [a-z0–9] : Соответствует символам от a до z или от 0 до 9.
  • [(+*)] : специальные символы внутри набора становятся буквальными, поэтому это соответствует (, +, * или );
  • [^ab5] : Добавление ^ исключает любой символ из набора. Здесь он соответствует символам, отличным от a, b или 5;
  • \[a\] : соответствует [a], поскольку обе скобки [ ] экранированы;

Группы

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

  • () : Соответствует выражению в скобках и группирует его, которое мы можем захватить по мере необходимости. Несколько групп могут быть сопоставлены одновременно.

Смотрите вперед и смотрите за утверждениями

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

  • A(?=B) : Это соответствует выражению A, только если за ним следует B. (Утверждение положительного просмотра вперед)
  • A(?!B) : Это соответствует выражению A, только если за ним не следует B. (Утверждение отрицательного просмотра вперед)
  • (?<=B)A : Это соответствует выражению A, только если B находится непосредственно слева от него. (Позитивный взгляд за утверждением)
  • (?<!B)A : Это соответствует выражению A, только если B не находится сразу слева от него. (Отрицательный взгляд за утверждением)

Выводы и дальнейшие шаги

В этой статье мы увидели основные функции пакета re, а также множество инструкций и примеров о том, как создавать регулярные выражения.

Возможные следующие шаги:

Спасибо за чтение! Если вы хотите узнать больше о НЛП, не забудьте подписаться на NLPlanet в Medium, LinkedIn и Twitter!