Язык программирования Python

       

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


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

Здесь стоит также отметить, что различные операции используют шаблон по-разному. Так, search() ищет первое вхождение строки, удовлетворяющей шаблону, в заданной строке, а match() требует, чтобы строка удовлетворяла шаблону с самого начала.

Символы, имеющие специальное значение в записи регулярных выражений:

СимволЧто обозначает в регулярном выражении
"."Любой символ
"^"Начало строки
"$"Конец строки
"*"Повторение фрагмента нуль или более раз (жадное)
"+"Повторение фрагмента один или более раз (жадное)
"?"Предыдущий фрагмент либо присутствует, либо отсутствует
"{m,n}"Повторение предыдущего фрагмента от m до n раз включительно (жадное)
"[...]" Любой символ из набора в скобках. Можно задавать диапазоны символов с идущими подряд кодами, например: a-z
"[^...]"Любой символ не из набора в скобках
"\" Обратная косая черта отменяет специальное значение следующего за ней символа
"|"Фрагмент справа или фрагмент слева
"*?"Повторение фрагмента нуль или более раз (не жадное)
"+?"Повторение фрагмента один или более раз (не жадное)
"{m,n}?"Повторение предыдущего фрагмента от m до n раз включительно (не жадное)

Если A и B - регулярные выражения, то их конкатенация AB является новым регулярным выражением, причем конкатенация строк a и b будет удовлетворять AB, если a удовлетворяет A и b удовлетворяет B. Можно считать, что конкатенация - основной способ составления регулярных выражений.

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


Алгоритм, который сопоставляет строки с регулярным выражением, проверяет соответствие того или иного фрагмента строки регулярному выражению. Например, строка "a" соответствует регулярному выражению "[a-z]", строка "fruit" соответствует "fruit|vegetable", а вот строка "apple" не соответствует шаблону "pineapple".
В таблице ниже вместо регвыр может быть записано регулярное выражение, вместо имя - идентификатор, а флаги будут рассмотрены ниже.
ОбозначениеОписание
"(регвыр)"Обособляет регулярное выражение в скобках и выделяет группу
"(?:регвыр)" Обособляет регулярное выражение в скобках без выделения группы
"(?=регвыр)" Взгляд вперед: строка должна соответствовать заданному регулярному выражению, но дальнейшее сопоставление с шаблоном начнется с того же места
"(?!регвыр)" То же, но с отрицанием соответствия
"(?<=регвыр)"Взгляд назад: строка должна соответствовать, если до этого момента соответствует регулярному выражению. Не занимает места в строке, к которой применяется шаблон. Параметр регвыр должен быть фиксированной длины (то есть, без "+" и "*")
"(?<!регвыр)"То же, но с отрицанием соответствия
"(?P<имя>регвыр)"Выделяет именованную группу с именем имя
"(?P=имя)" Точно соответствует выделенной ранее именованной группе с именем имя
"(?#регвыр)"Комментарий (игнорируется)
"(?(имя)рв1|рв2)" Если группа с номером или именем имя оказалась определена, результатом будет сопоставление с рв1, иначе - c рв2. Часть |рв2 может отсутствовать
"(?флаг)" Задает флаг для всего данного регулярного выражения. Флаги необходимо задавать в начале шаблона

В таблице ниже описаны специальные последовательности, использующие обратную косую черту:
ПоследовательностьЧему соответствует
"\1" - "\9"Группа с указанным номером. Группы нумеруются, начиная с 1
"\A" Промежуток перед началом всей строки (почти аналогично "^")
"\Z" Промежуток перед концом всей строки (почти аналогично "$")
"\b" Промежуток между символами перед словом или после него
"\B"Наоборот, не соответствует промежутку между символами на границе слова
"\d" Цифра. Аналогично "[0-9]"
"\s" Любой пробельный символ. Аналогично "[\t\n\r\f\v]"
"\S" Любой непробельный символ. Аналогично "[^\t\n\r\f\v]"
"\w" Любая цифра или буква (зависит от флага LOCALE)
"\W" Любой символ, не являющийся цифрой или буквой (зависит от флага LOCALE)
<


Флаги, используемые с регулярными выражениями:
"(?i)", re.I, re.IGNORECASE
Сопоставление проводится без учета регистра букв.
"(?L)", re.L, re.LOCALE
Влияет на определение буквы в "\w", "\W", "\b", "\B" в зависимости от текущей культурной среды (locale).
"(?m)", re.M, re.MULTILINE
Если этот флаг задан, "^" и "$" соответствуют началу и концу любой строки.
"(?s)", re.S, re.DOTALL
Если задан, "." соответствует также и символу конца строки "\n".
"(?x)", re.X, re.VERBOSE
Если задан, пробельные символы, не экранированные в шаблоне обратной косой чертой, являются незначащими, а все, что расположено после символа "#", -- комментарии. Позволяет записывать регулярное выражение в несколько строк для улучшения его читаемости и записи комментариев.
"(?u)", re.U, re.UNICODE
В шаблоне и в строке использован Unicode.

Содержание раздела