Документация модуля Re для Python 3 в формате . Модуль Re для регулярных выражений

Регулярные выражения — очень популярный компонент практически любого языка программирования. Они помогут вам быстро получить доступ к необходимой информации. В частности, они используются, когда необходимо обработать текст. По умолчанию Python поставляется со специальным модулем. re, который отвечает за работу с регулярными выражениями.

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

Регулярные выражения: введение

Как используются регулярные выражения? Почти все. Например, эти:

  1. Веб-приложения, требующие проверки текста. Типичный пример — онлайн-почтовые клиенты.
  2. Любые другие проекты, связанные с текстами, базами данных и так далее.

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

Что такое шаблон в библиотеке Re?

С его помощью можно искать информацию различных типов, получать соответствующую им информацию, чтобы сделать другие функции более адаптивными. И, конечно же, обрабатывать эти данные.

Например, возьмем следующий шаблон: s+. Это означает любой пробел. Если к нему добавить знак плюса, то это означает, что шаблон включает более одного пробела. Он может даже сопоставлять символы табуляции, которые вызываются с помощью t+.

Перед их использованием необходимо импортировать библиотеку Re. После этого используем специальную команду для компиляции шаблона. Это делается в два этапа.

>>> импортировать повторно

>>> регулярное выражение = re.compile('s+')

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

Получение отдельной информации из разных строк с помощью регулярных выражений

Предположим, у нас есть переменная, содержащая следующую информацию.

>>> text = «»»100 ИНФ Информатика

213 МАХ Математика  

156 РУС Английский»»»

Он содержит три учебных курса. Каждый из них состоит из трех частей – номера, кода и имени. Мы видим, что интервал между этими словами разный. Что сделать, чтобы разбить эту строку на отдельные цифры и слова? Есть два метода достижения этой цели:

  1. вызвать функцию повторно разделить.
  2. применить функцию раскол для регулярное выражение.

Вот пример использования синтаксиса каждого из методов для нашей переменной.

>>> re.split('s+', текст)  

# или же

>>> regex.split(текст)

Вывод: ['100', 'INF', 'Информатика', '213', 'MAT', 'Математика', '156', 'ENG', 'Английский язык']

В целом можно использовать оба метода. Но на самом деле гораздо проще использовать регулярное выражение вместо многократного использования функции. повторно разделить.

Поиск совпадений с помощью трех функций

Допустим, нам нужно извлечь из строки только числа. Что для этого нужно сделать?

re.findall ()

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

>>> распечатать(текст)  

100 ИНФ Информатика

213 МАХ Математика  

156 АНГЛИЙСКИЙ английский

>>> regex_num = re.compile('d+')  

>>> regex_num.findall(текст)  

['100', '213', '156']

Вместе с символом d мы использовали шаблон, обозначающий абсолютно любое числовое значение, находящееся в переменной или тексте. А раз мы добавили туда один +, то это означает, что хотя бы одно число должно присутствовать. 

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

Но в нашем случае, поскольку мы использовали +, мы извлекли с помощью найти все() 1 или несколько цифровых обозначений курсов из текста. Таким образом, в нашем случае настройками функции выступают регулярные выражения.

re.search() против re.match ()

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

В свою очередь, функция re.match делает то же самое. Только синтаксис другой. Шаблон необходимо разместить в начале. 

Давайте рассмотрим пример, демонстрирующий это.

>>> # создаем переменную с текстом

>>> text2 = «»»INF Информатика

213 MAT Математика 156″»»  

>>> # компилируем регулярное выражение и ищем шаблоны

>>> regex_num = re.compile('d+')  

>>> s = regex_num.search(text2)  

>>> print('Первый индекс: ', s.start())  

>>> print('Последний индекс: ', s.end())  

>>> print(text2[s.start():s.end()]) 

Первый индекс: 17 

Последний индекс: 20

213

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

Замена части текста библиотекой Re

Для замены текста используйте функцию re.sub(). Предположим, наш список курсов немного изменился. Мы видим, что после каждого цифрового значения у нас есть вкладка. Наша задача — объединить всю эту последовательность в одну строку. Для этого нам нужно заменить выражение s+ перейти 

Исходный текст был:

# создаем переменную с текстом

>>> text = «»»100 INF t Информатика

213 МАТ t Математика  

156 АНГЛ t Английский»»»  

>>> распечатать(текст)  

100 ИНФО информатика

213 МАТ Математика  

156 АНГ Английский

Для выполнения нужной операции мы использовали следующие строки кода.

# заменяем один или несколько пробелов на 1

>>> регулярное выражение = re.compile('s+')  

>>> print(regex.sub(' ', текст))  

В результате у нас есть одна строка. 

101 COM Компьютеры 205 MAT Математика 189 ENG Английский

Теперь рассмотрим другую проблему. Перед нами не стоит задача расставить пробелы. Для нас гораздо важнее, чтобы все названия курсов начинались с новой строки. Для этого используется другое выражение, добавляющее к исключению новую строку. Что это за выражение?

Библиотека Re поддерживает такую ​​функцию, как отрицательное сопоставление. Отличается от прямого тем, что перед косой чертой стоит восклицательный знак. То есть, если нам нужно пропустить символ новой строки, то вместо n нужно написать !n.

Мы получаем следующий код.

#удаляем все пробелы кроме новой строки  

>>> регулярное выражение = re.compile('((?!n)s+)')  

>>> print(regex.sub(' ', текст))  

100 ИНФ Информатика

213 МАХ Математика  

156 АНГЛИЙСКИЙ английский

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

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

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

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

Будет очень небольшое количество строк. 

# создавать группы текстовых шаблонов курса и извлекать их

>>> Course_pattern = '([0-9]+)s*([A-ZY]{3})s*([a-zA-ZoY]{4,})'  

>>> re.findall(course_pattern, текст)  

[('100', 'INF', 'Информатика'), ('213', 'MAT', 'Математика'), ('156', 'ENG', 'Английский язык')]

Концепция «жадного» сопоставления

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

Давайте посмотрим на пример HTML-кода, в котором нам нужно получить тег.

>>> text = «Пример жадного сопоставления регулярных выражений»  

>>> re.findall('', текст)  

['Пример жадного сопоставления регулярных выражений']

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

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

Вы получите следующий код и выходные данные интерпретатора.

>>> re.findall('', текст)  

[», »]

Если требуется получить только первое встреченное вхождение, то используется метод поиск ().

re.search('', текст).group()  

Тогда будет найден только открывающий тег.

Популярные шаблоны выражений

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

Документация модуля Re для Python 3 в формате . Модуль Re для регулярных выражений

Заключение

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

Они позволяют выполнять такие задачи, как:

  1. Указание формата данных, например адреса электронной почты или номера телефона.
  2. Получение строки и разбиение ее на несколько строк меньшего размера.
  3. Выполняйте различные операции с текстом, например, поиск, извлечение необходимой информации или замену части символов.

Регулярные выражения также позволяют выполнять нетривиальные операции. На первый взгляд, освоить эту науку непросто. Но на практике все стандартизировано, поэтому достаточно один раз разобраться, после чего этот инструмент можно будет использовать не только в Python, но и в любом другом языке программирования. Даже Excel использует регулярные выражения для автоматизации обработки данных. Так что грех не воспользоваться этим инструментом.

Оставьте комментарий