Инструменты пользователя

Инструменты сайта


python:reguljarnye_vyrazhenija:vvedenie

Введение

Регулярные выражения могут содержать как специальные, так и обычные символы. Обычные символы, например, A, a, 0, уже можно расценивать, как простейшие регулярные выражения — под эти шаблоны подпадают собственно строки, состоящие из этих символов. Если склеить несколько символов, например, в шаблон cat, то под этот шаблон подпадёт строка cat.

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

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

Базовые
\ Либо экранирует специальные символы, либо указывает на использование специальной последовательности (см. ниже). Помните: в Питоне обратный слеш тоже используется для экранирования в строковых литералах, поэтому зачастую в шаблонах рекомендуется использовать сырые строки (с префиксом r), которые не требуют экранирования.
. По умолчанию описывает любой символ, кроме перевода строки. С флагом DOTALL — также и перевод строки.
^ Начало строки. С флагом MULTILINE — начало каждой из строк.
$ Завершение строки. С флагом MULTILINE — завершение каждой из строк.
x|y Описывает первое подходящее из указанных выражений x или y. При помощи | можно соединить и более двух выражений.
[] Описывает указанное в скобках множество допустимых символов. Специальные символы внутри множества не работают. Поддерживаются диапазоны, например: [a-z], [Н-Я], [0-8]. Описатели классов символов допускаются, но зависят от режима интерпретации выражения (ASCII, либо LOCALE). Описать символы не входящие в указанное множество можно при помощи ^ после открывающей скобки, например: [^abc], [^\d]. Чтобы включить символ ] во множество, его можно либо указать непосредственно после открывающей скобки, либо экранировать при помощи \.
Специальные последовательности (начинаются с обратного слеша — \)
\num Где num — число (от 1 до 99). Ссылается на группу указанную при помощи её порядкового номера. Под группой с индексом 0 обычно понимается обнаруженная строка в целом.
\A Пустая строка в начале строки.
\b Пограничная пустая строка (в начале или конце слова). Определение слова может зависеть от текущей локали. Внимание: в диапазонах символизирует возврат на символ (backspace).
\B Пустая строка не в начале и не в конце слова (т.е. обычно внутри слова).
\d Описывает десятичную цифру. Для Юникода — это символы категории [Nd], для ASCII и байт — это то же, что и [0-9].
\D Нецифровой символ.
\s Пробельные символы. Для ASCII — то же, что и [ \t\n\r\f\v], для Юникода включает дополнительные символы, например неразрывный пробел.
\S Непробельные символы.
\w Символы, которые могут входить в состав слов, включая числа и подчёркивание. Для ASCII и байт — то же, что и [a-zA-Z0-9_].
\W Несловарные символы.
\Z Пустая строка в конце строки.
Количественные описатели
* 0 и более повторений предшествующего выражения.
+ 1 и более повторений предшествующего выражения.
? 0 или 1 повторение предшествующего выражения.
{x} x (число) повторений предшествующего выражения.
{x,y} От x до y повторений предшествующего выражения. Если опустить x, то предполагается 0; если опустить y, то предполагается неопределённое количество (запятую при этом опускать нельзя).
*?, +?, ??, {x,y}? Добавление ? к указанным описателям делает их нежадными, т.е. они станут описывать как можно меньшее количество символов. Сравните: под <.+> подпадёт вся строка <x>b<y> , в то время, как под <.+?> — только <x> .
Группировка
(x) Задаёт группу, в которую должно попасть выражение x, к которой можно обращаться в дальнейшем по индексу — \1 (если группа имеет номер 1).
(?P<name>x) Задаёт группу с именем name, в которую должно попасть выражение x. Групп в дальнейшем можно адресовать как по указанному имени, так и по индексу — (?P=name) или \1 (если группа имеет номер 1).
(?:x) Задаёт группу, в которую должно попасть выражение x, к которой нельзя будет обратиться в дальнейшем ни по индексу, ни по имени.
(?#…) Комментарий. При разборе выражения будет проигнорирован.
Условия
x(?=y) Описывает выражение x только если за ним следует y. Например: маршал (?=Жуков) обнаружит маршал в строке маршал Жуков, но не в маршал Конев.
x(?!y) Описывает выражение x только если за ним не следует y. Например: маршал (?!Жуков) обнаружит маршал в строке маршал Конев, но не в маршал Жуков.
x(?⇐y) Описывает выражение y только если ему предшествует x. Например: (?⇐маршал) Жуков обнаружит Жуков в строке маршал Жуков, но не в капитан Жуков. Внимание: использование количественных описателей не поддерживается, требуются строки фиксированной длины.
x(?<!y) Описывает выражение y только если ему не предшествует x. Например: (?<!маршал) Жуков обнаружит Жуков в строке капитан Жуков, но не в маршал Жуков. Внимание: использование количественных описателей не поддерживается, требуются строки фиксированной длины.
(?(g)y|n)Если группа g обнаружена, то описывает выражение y, иначе — выражение n. Например: под (?P<is_comrade>товарищ)?(?(is_comrade) и брат|тамбовский волк) подпадают строки товарищ и брат и тамбовский волк.
Управление интерпретацией
(?aiLmsux) Позволяет задать флаги интерпретации всего выражения без передачи параметра flag функциям. Значения символов:a — только ASCII;i — игнорировать регистр; L — использовать локаль; m — многострочный режим; s — точка обозначает любой символ; u — Юникод; x — дозволить описания в выражении.
(?aiLmsux-imsx:…) Позволяет задать флаги интерпретации указанного выражения. После минуса можно указать флаги, которые требуется сбросить. a, L, u — взаимоисключающие,

Флаги интерпретации

re.A, re.ASCIIЕсли установлен, то \w, \W, \b, \B, \d, \D, \s и \S описывают только ASCII символы, а не Юникод. Внимание: для байтовых шаблонов не используется.
re.DEBUGВыводить отладочную информацию о скомпилированном выражении.
re.I, re.IGNORECASEИгнорировать регистр символов. Текущая локаль не влияет на работу, покуда не проставлен re.LOCALE.
re.L, re.LOCALEЕсли установлен, то \w, \W, \b, \B будут ориентироваться на настройки текущей локали. Рассчитан на работу с байтами. В 3.0 использование не рекомендуется — работа с Юникодом даёт более надёжные результаты.
re.M, re.MULTILINEМногострочный режим. Если установлен, то ^ и $ будут находить начало и конец соответственно для каждой строки, включая переводы строк. В про время как по умолчанию на переводы строк указанные описатели не реагируют.
re.S, re.DOTALLЕсли установлен, то . обозначает любой символ, включая перевод строки.
re.U, re.UNICODEЕсли установлен, то \w, \W, \b, \B, \d, \D, \s и \S описывают символы Юникода. Внимание: для 3.0 это режим по умолчанию.
re.X, re.VERBOSEДозволяет описания в регулярных выражениях. Благодаря описаниям иногда шаблоны становятся более читаемыми. Описание можно поместить прямо в шаблон, начав его с #, при этом неэкранированные пробелы в шаблоне игнорируются.
python/reguljarnye_vyrazhenija/vvedenie.txt · Последние изменения: 2023/01/12 12:18 (внешнее изменение)