Как установить модуль re python
Перейти к содержимому

Как установить модуль re python

  • автор:

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

Модуль re предоставляет операции сопоставления шаблонов регулярных выражений, аналогичные тем, которые встречаются в языке Perl .

Новое в Python 3.11: Механизм сопоставления регулярных выражений модуля re был частично переработан и теперь использует вычисляемые переходы (или «поточный код«) на поддерживаемых платформах. В результате Python 3.11 выполняет тесты регулярных выражений pyperformance на 10% быстрее, чем Python 3.10.

Шаблоны регулярных выражений и строки для поиска могут быть как Unicode strings, так и 8-битными строками . Однако строки Unicode и 8-битные строки не могут быть смешаны. То есть вы не можете сопоставить строку Unicode с байтовым шаблоном регулярного выражения или наоборот. Аналогично, при замене на основе регулярного выражения строка замены должна быть того же типа, что и регулярное выражение и строка поиска.

Регулярные выражения используют символ обратной косой черты ‘\’ , чтобы указать специальные формы или разрешить использование специальных символов, используемых в шаблонах поиска без вызова их специального значения. Это противоречит использованию в Python одного и того же символа для той же цели в строковых литералах. Например, чтобы сопоставить обратную косую черту литерала ‘\’ , может потребоваться записать ‘\\\\’ как строку шаблона поиска, потому что регулярное выражение должно быть \\ , и каждая обратная косая черта должна быть выражена как \\ внутри обычного строкового литерала Python.

Решение заключается в использовании необработанной строковой нотации Python для шаблонов регулярных выражений. Обратная косая черта не обрабатывается особым образом в строковом литерале с префиксом ‘r’ . Так что r»\n» это двухсимвольная строка, содержащая ‘\’ и ‘n’ , в то время как «\n» односимвольная строка, содержащая новую строку. Обычно шаблоны поиска будут выражаться в коде Python с использованием этой необработанной строковой записи.

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

Синтаксис регулярных выражений в Python

Регулярные выражения могут быть объединены для формирования новых регулярных выражений; если A и B оба являются регулярными выражениями, то AB также является регулярным выражением. Большинство обычных символов, таких как ‘A’, ‘a’или ‘0’, являются простейшими регулярными выражениями; они просто соот

Функция compile() модуля re в Python

Функция compile() модуля re компилирует шаблон регулярного выражения pattern в объект регулярного выражения, который может быть использован для поиска совпадений

Флаги, используемые в функции re.compile()

Флаги, используемые для компиляции регулярного выражения.

Функция search() модуля re в Python

Функция search() модуля re сканирует строку string в поисках первого совпадения с шаблоном pattern регулярного выражения и возвращает соответствующий объект соответствия

Функция match() модуля re в Python

Функция match() модуля re вернуть соответствующий объект сопоставления, если ноль или более символов в начале строки string соответствуют шаблону регулярного выражения pattern.

Функция fullmatch() модуля re в Python

Функция fullmatch() модуля re вернет объект сопоставления, если вся строка string соответствует шаблону регулярного выражения pattern.

Функция finditer() модуля re в Python

Функция finditer() модуля re возвращает итератор объектов сопоставления по всем неперекрывающимся совпадениям для шаблона регулярного выражения в строке.

Функция split() модуля re в Python

Функция `split()` модуля `re` делит строку по появлению шаблона регулярного выражения `pattern` и возвращает список получившихся подстрок.

Функция findall() модуля re в Python

Функция findall() модуля re возвращает все неперекрывающиеся совпадения шаблона pattern в строке string в виде списка строк. Строка сканируется слева направо, и совпадения возвращаются в найденном порядке.

Функция sub() модуля re в Python

Функция sub() модуля re возвращает строку, полученную путем замены крайнего левого неперекрывающегося вхождения шаблона регулярного выражения pattern в строке string на строку замены repl. Если шаблон регулярного выражения не найден, строка возвращается без изменений.

Функция subn() модуля re в Python

Функция subn() модуля re выполняет ту же операцию, что и функция sub(), но возвращает кортеж (new_string, number_of_subs_made)

Функция escape() модуля re в Python

Функция `escape()` модуля `re` выполняет экранирование специальных символов в шаблоне. Это полезно, если требуется сопоставить произвольную строку литерала, которая может содержать метасимволы регулярных выражений

Функция purge() модуля re в Python

Функция `purge()` модуля `re` очищает кэш от регулярных выражений.

Исключение error() модуля re в Python

Исключение `error()` модуля `re` возникает, когда строка, переданная одной из функций модуля, не является допустимым регулярным выражением, например шаблон может содержать несоответствующие скобки или когда возникает какая-либо другая ошибка во время компиляции шаблона или сопоставления со строкой.

Объект регулярного выражения Pattern модуля re в Python

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

Объект совпадения с шаблоном Match модуля re в Python

Объект сопоставления регулярного выражения со строкой всегда имеет логическое значение True. Можно проверить, было ли совпадение, с помощью простого утверждения if. else. Объекты сопоставления поддерживают методы и атрибуты.

  • ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
  • Синтаксис регулярных выражений
  • Функция compile() модуля re
  • Флаги, используемые в функции re.compile()
  • Функция search() модуля re
  • Функция match() модуля re
  • Функция fullmatch() модуля re
  • Функция finditer() модуля re
  • Функция split() модуля re
  • Функция findall() модуля re
  • Функция sub() модуля re
  • Функция subn() модуля re
  • Функция escape() модуля re
  • Функция purge() модуля re
  • Исключение error() модуля re
  • Объект регулярного выражения Pattern модуля re
  • Объект совпадения с шаблоном Match модуля re

15. Модуль re#

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

Основные функции модуля re:

  • match — ищет последовательность в начале строки
  • search — ищет первое совпадение с шаблоном
  • findall — ищет все совпадения с шаблоном. Возвращает результирующие строки в виде списка
  • finditer — ищет все совпадения с шаблоном. Возвращает итератор
  • compile — компилирует регулярное выражение. К этому объекту затем можно применять все перечисленные функции
  • fullmatch — вся строка должна соответствовать описанному регулярному выражению

Кроме функций для поиска совпадений, в модуле есть такие функции:

  • re.sub — для замены в строках
  • re.split — для разделения строки на части

Модуль Re для регулярных выражений в Python

Регулярные выражения — специальная последовательность символов, которая помогает сопоставлять или находить строки python с использованием специализированного синтаксиса, содержащегося в шаблоне. Регулярные выражения распространены в мире UNIX.

Модуль re предоставляет полную поддержку выражениям, подобным Perl в Python. Модуль re поднимает исключение re.error , если возникает ошибка при компиляции или использовании регулярного выражения.

Давайте рассмотрим две функции, которые будут использоваться для обработки регулярных выражений. Важно так же заметить, что существуют символы, которые меняют свое значение, когда используются в регулярном выражении.Чтобы избежать путаницы при работе с регулярными выражениями, записывайте строку как r’expression’ .

Функция match

Эта функция ищет pattern в string и поддерживает настройки с помощью дополнительного flags .
Ниже можно увидеть синтаксис данной функции:

re.match(pattern, string, flags=0) 
Параметр & Описание
1 pattern — строка регулярного выражения ( r’g.le’ )
2 string — строка, в которой мы будем искать соответствие с шаблоном в начале строки ( ‘google’ )
3 flags — модификаторы, перечисленными в таблице ниже. Вы можете указать разные флаги с помощью побитового OR

Функция re.match возвращает объект match при успешном завершении, или None при ошибке. Мы используем функцию group(num) или groups() объекта match для получения результатов поиска.

Метод совпадения объектов и описание
1 group(num=0) — этот метод возвращает полное совпадение (или совпадение конкретной подгруппы)
2 groups() — этот метод возвращает все найденные подгруппы в tuple

Пример функции re.match

import re title = "Error 404. Page not found" exemple = re.match( r'(.*)\. (.*?) .*', title, re.M|re.I) if exemple: print("exemple.group() : ", exemple.group()) print("exemple.group(1) : ", exemple.group(1)) print("exemple.group(2) : ", exemple.group(2)) print("exemple.groups():", exemple.groups()) else: print("Нет совпадений!") 

Когда вышеуказанный код выполняется, он производит следующий результат:

exemple.group(): Error 404. Page not found exemple.group(1): Error 404 exemple.group(2): Page exemple.groups(): ('Error 404', 'Page') 

Функция search

Эта функция выполняет поиск первого вхождения pattern внутри string с дополнительным flags .
Пример синтаксиса для этой функции:

re.search(pattern, string, flags=0) 
Параметр & Описание
1 pattern — строка регулярного выражения
2 string — строка, в которой мы будем искать первое соответствие с шаблоном
3 flags — модификаторы, перечисленными в таблице ниже. Вы можете указать разные флаги с помощью побитового OR

Функция re.search возвращает объект match если совпадение найдено, и None , когда нет совпадений. Используйте функцию group(num) или groups() объекта match для получения результата функции.

Способы совпадения объектов и описание
1 group(num=0) — метод, который возвращает полное совпадение (или же совпадение конкретной подгруппы)
2 groups() — метод возвращает все сопоставимые подгруппы в tuple

Пример функции re.search

import re title = "Error 404. Page not found" # добавим пробел в начало паттерна exemple = re.search( r' (.*)\. (.*?) .*', title, re.M|re.I) if exemple: print("exemple.group():", exemple.group()) print("exemple.group(1):", exemple.group(1)) print("exemple.group(2):", exemple.group(2)) print("exemple.groups():", exemple.groups()) else: print("Нет совпадений!") 

Запускаем скрипт и получаем следующий результат:

exemple.group(): 404. Page not found exemple.group(1): 404 exemple.group(2): Page exemple.groups(): ('404', 'Page') 

Match и Search

Python предлагает две разные примитивные операции, основанные на регулярных выражениях: match выполняет поиск паттерна в начале строки, тогда как search выполняет поиск по всей строке.

Пример разницы re.match и re.search

import re title = "Error 404. Page not found" match_exemple = re.match( r'not', title, re.M|re.I) if match_exemple: print("match --> match_exemple.group():", match_exemple.group()) else: print("Нет совпадений!") search_exemple = re.search( r'not', title, re.M|re.I) if search_exemple: print("search --> search_exemple.group():", search_exemple.group()) else: print("Нет совпадений!") 

Когда этот код выполняется, он производит следующий результат:

Нет совпадений! search --> search_exemple.group(): not 

Метод Sub

Одним из наиболее важных методов модуля re, которые используют регулярные выражения, является re.sub .
Пример синтаксиса sub:

re.sub(pattern, repl, string, max=0) 

Этот метод заменяет все вхождения pattern в string на repl , если не указано на max . Он возвращает измененную строку.

Пример

import re born = "05-03-1987 # Дата рождения" # Удалим комментарий из строки dob = re.sub(r'#.*$', "", born) print("Дата рождения:", dob) # Заменим дефисы на точки f_dob = re.sub(r'-', ".", born) print(f_dob) 

Запускаем скрипт и получаем вывод:

Дата рождения: 05-03-1987 05.03.1987 # Дата рождения 

Модификаторы регулярных выражений: flags

Функции регулярных выражений включают необязательный модификатор для управления изменения условий поиска. Модификаторы задают в необязательном параметре flags . Несколько модификаторов задают с помощью побитового ИЛИ ( | ), как показано в примерах выше.

Модификатор & Описание
1 re.I — делает поиск нечувствительным к регистру
2 re.L — ищет слова в соответствии с текущим языком. Эта интерпретация затрагивает алфавитную группу (\w и \W), а также поведение границы слова (\b и \B).
3 re.M — символ $ выполняет поиск в конце любой строки текста (не только конце текста) и символ ^ выполняет поиск в начале любой строки текста (не только в начале текста).
4 re.S — изменяет значение точки (.) на совпадение с любым символом, включая новую строку
5 re.U— интерпретирует буквы в соответствии с набором символов Unicode. Этот флаг влияет на поведение \w, \W, \b, \B. В python 3+ этот флаг установлен по умолчанию.
6 re.X— позволяет многострочный синтаксис регулярного выражения. Он игнорирует пробелы внутри паттерна (за исключением пробелов внутри набора [] или при экранировании обратным слешем) и обрабатывает не экранированный “#” как комментарий.

Шаблоны регулярных выражений

За исключением символов (+?. * ^ $ () [] <> | ), все остальные соответствуют самим себе. Вы можете избежать экранировать специальный символ с помощью бэкслеша ( / ).

В таблицах ниже описаны все символы и комбинации символов для регулярных выражений, которые доступны в Python:

Шаблон & Описание
1 ^ — соответствует началу строки.
2 $— соответствует концу строки.
3 . — соответствует любому символу, кроме новой строки. Использование флага re.M позволяет также соответствовать новой строке.
4 [4fw] — соответствует любому из символов в скобках.
5 [^4fw] — соответствует любому символу, кроме тех, что в квадратных скобках.
6 foo* — соответствует 0 или более вхождений “foo”.
7 bar+ —- соответствует 1 или более вхождениям “bar”.
8 foo? —- соответствует 0 или 1 вхождению “foo”.
9 bar —- соответствует трем подряд вхождениям “bar”.
10 foo — соответствует 3 или более вхождениям “foo”.
11 bar —- соответствует от 2 до 5 вхождениям “bar”.
12 a|b — соответствует либо a, либо b.
13 (foo) — группирует регулярные выражения.
14 (?imx) — временно включает параметры i, m или x в регулярное выражение. Если используются круглые скобки — затрагивается только эта область.
15 (?-imx) — временно отключает опции i, m или x в регулярном выражении. Если используются круглые скобки — затрагивается только эта область.
16 (?: foo) — Группирует регулярные выражения без сохранения совпадающего текста.
17 (?imx: re) — Временно включает параметры i, m или x в круглых скобках.
18 (?-imx: re) — временно отключает опции i, m или x в круглых скобках.
19 (?#…) — комментарий.
20 (?= foo) — совпадает со всеми словами после которых » foo».
21 (?! foo) — совпадает со всеми словами после которых нет » foo».
22 (?> foo) — совпадает со всеми словами перед которыми » foo».
23 \w — совпадает с буквенным символом.
24 \W — совпадает с не буквенным символом.
25 \s — совпадает с пробельными символами (\t, \n, \r, \f и пробелом).
26 \S — все кроме пробельных символов.
27 \d — соответствует цифрам (0-9).
28 \D — все кроме цифры.
29 \A — соответствует началу строки.
30 \Z – соответствует концу строки. Включая перевод на новую строку, если такая есть.
31 \z — соответствует концу строки.
32 \G — соответствует месту, где закончилось последнее соответствие.
33 \b — соответствует границам слов, когда поставлены внешние скобки.
34 \B — все кроме границы слова.
35 **\n,\t,\r,\f ** — соответствует новым строкам, подстрокам.
36 \1…\9 — соответствует подгруппе n-й группы.
37 \10 — соответсвуйет номеру группы. В противном случае относится к восьмеричному представлению символьного кода.

Примеры регулярных выражений

Поиск по буквам

python – находит “python”. |

Поиск по наборам символов

Паттерн & Результаты
1 [Pp]ython соответствует “Python” и “python”
2 rub[ye] соответствует “ruby” и “rube”
3 [aeiou] Соответствует любой гласной нижнего регистра английского алфавита ([ауоыиэяюёе] для русского)
4 [0-9] соответствует любой цифре; так же как и [0123456789]
5 [a-z] соответствует любой строчной букве ASCII (для кириллицы [а-яё])
6 [A-Z] соответствует любой прописной букве ASCII (для кириллицы [А-ЯЁ])
7 [a-zA-Z0-9] соответствует всем цифрам и буквам
8 [^aeiou] соответствует всем символам, кроме строчной гласной
9 [^0-9] Соответствует всем символам, кроме цифр

Специальные классы символов

Пример & Описание
1 . соответствует любому символу, кроме символа новой строки
2 \d соответствует цифрам: [0-9]
3 \D не соответствует цифрам: [^0-9]
4 \s соответствует пробельным символам: [\t\r\n\f]
5 \S не соответствует пробельным символам: [^ \t\r\n\f]
6 \w соответствует одному из буквенных символов: [A-Za-z0-9_]
7 \W не соответствует ни одному из буквенных символов: [^A-Za-z0-9_]

Случаи повторения

Примеры
1 ruby? совпадает с “rub” и “ruby”: “y” необязателен
2 ruby* совпадает с “rub” и “rubyyyyy”: “y” необязателен и может повторятся несколько раз
3 ruby+ совпадает с “ruby”: “y” обязателен
4 \d совпадает с тремя цифрами подряд
5 \d совпадает с тремя и более цифрами подряд
6 \d совпадает с 3,4,5 цифрами подряд

Жадный поиск

Пример & Описание
1 Жадное повторение: соответствует “perl>”
2 Ленивый поиск: соответствует “” в “perl>”

Группирование со скобками

Пример & Описание
1 \D\d+ Нет группы: + относится только к \d
2 (\D\d)+ Группа: + относится к паре \D\d
3 ([Pp]ython(, )?)+ соответствует “Python”, “Python, python, python”.

Ссылки на группы

Пример & Описание
1 ([Pp])ython&\1ails совпадает с python&pails и Python&Pails
2 ([’»])[^\1]*\1 Строка с одним или двумя кавычками. \1 соответствует 1-й группе. \2 соответствует второй группе и т. д.

Или

Пример & Описание
1 python|perl соответствует “python” или “perl”
2 rub(y|le)) соответствует “ruby” или “ruble”
3 Python(!+|?) после «Python» следует 1 и более “!” или один “?”

Границы слов и строк

Пример & Описание
1 ^Python соответствует “Python” в начале текста или новой строки текста.
2 Python$ соответствует “Python” в конце текста или строки текста.
3 \APython соответствует “Python” в начале текста
4 Python\Z соответствует “Python” в конце текста
5 \bPython\b соответствует “Python” как отдельному слову
6 \brub\B соответствует «rub» в начале слова: «rube» и «ruby».
7 Python(?=!) соответствует “Python”, если за ним следует восклицательный знак.
8 Python(. ) соответствует “Python”, если за ним не следует восклицательный знак

Специальный синтаксис в группах

Пример & Описание
1 R(?#comment) соответствует «R». Все, что следует дальше — комментарий
2 R(?i)uby нечувствительный к регистру при поиске “uby”
3 R(?i:uby) аналогично указанному выше
4 rub(?:y le)) группируется только без создания обратной ссылки (\1)
  • ТЕГИ
  • Регулярные выражения

Модуль re: регулярные выражения в Python

Регулярные выражения (regular expressions) являются важнейшим инструментом для многих задач NLP в Python. Сегодня мы расскажем об основных функциях Python-модуля re. Читайте в этой статье: как с помощью регулярных выражений найти нужные символы, как посчитать количество вхождений, а также как заменить одну подстроку на другую в Python

Зачем нужны регулярные выражения

Регулярные выражения — последовательность символов, которая определяет шаблон поиска. Например, для задач NLP это может быть поиск именованных сущностей (для такой задачи может подойти Python-библиотека Yargy). Представим себе выражение:

Требуется извлечь из него слово «cool». Казалось бы, сделать это очень просто, достаточно передать это слово в Python-функцию с регулярным выражением. Но поскольку это набор символов, то выражения, которые содержат этот набор также сработают:

Python is coolest
I have a watercooler
Python is supercool

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

Для работы с регулярными выражениями в Python используется модуль re (сокращено от regular expression). В нем содержится 4 основные функции: search, match, findall, finditer, а также sub Причём у первых 4-х одинаковая сигнатура — принимают на вход шаблон и выражение. Обращаясь к предыдущему примеру, шаблоном является «cool». Функция sub дополнительно принимает на вход строку для замены.

Ищем первый попавшийся шаблон с search

Функция search найдёт в выражении первый попавшийся шаблон. Нам нужно найти шаблон, который состоит из последовательности символов c, o, o, l. Поэтому передаём в функцию этот шаблон и выражение. Такое регулярное выражение в Python выглядит следующим образом:

>>> import re
>>> expr = ‘Python is cool’
>>> pattern = ‘cool’
>>> re.search(pattern, expr)

Мы получили объект Match, а span показывает индексы шаблона в выражении. Поэтому его так же можно извлечь в Python:

Заметим, что функция search находит только первый попавшийся шаблон, дальше она уже не смотрит:

>>> expr = ‘Python is cool, very cool’

Также не забываем, что шаблон — это последовательность символов, а не само слово. Например, ниже показано, как в Python находится последовательность «cool» в составном слове.

>>> expr = ‘I have a watercooler’

Ищем все вхождения с findall и finditer

В отличие от функции search, две других findall и finditer вернут все найденные вхождения. Отличаются findall и finditer друг от друга тем, что первый возвращает список (list), а второй итератор (iterator), о котором говорили тут. Возвращаясь к предыдущему примеру, регулярное выражение для нахождения всех совпадений в Python будет выглядеть так:

>>> expr = ‘Python is cool, very cool’

>>> re.findall(‘cool’, expr) [‘cool’, ‘cool’]

С помощью функции findall можно посчитать количество шаблонов во всей строке:

Проверяем начало строки с match

Функция match проверит начало строки на содержание шаблона. Пример выше не начинается с cool, поэтому эта функция вернёт None. С другой стороны, если выражение начинается с шаблона, то функция match вернёт объект Match. Рассмотрите следующие регулярные выражения в Python:

>>> expr = ‘Python is cool’

>>> re.match(‘cool’, expr) is None

Исключаем шаблон из строки с sub

Ещё одной полезной функцией Python-модуля re является sub. Она необходима, когда один шаблон нужно заменить на другой и пригодится для подготовки текстов перед применением NLP-методов в Python, например, для избавления от всех цифр, знаков препинания и символов. К сигнатуре этой функции добавляется аргумент repl — на какую строку заменяем. Ниже регулярные выражения в Python это демонстрируют. Обратите внимание, что sub возвращает строку, поэтому их стоит переприсвоить.

>>> expr = ‘Python is cool, very cool’

>>> re.sub(pattern, repl, expr)

‘Python is slow, very slow’

Также отметим, что функция заменяет все вхождения. Если требуется ограничить это число, то оно указывается в аргументе count.

>>> re.sub(pattern, repl, expr, count=1)

‘Python is slow, very cool’

Ещё больше подробностей о работе регулярных выражения в Python на реальных примерах Data Science задач, вы узнаете на нашем специализированном курсе «PNLP: NLP — обработка естественного языка с Python» в лицензированном учебном центре обучения и повышения квалификации Data Scientist’ов и IT-специалистов в Москве.

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

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