Оглавление:
Карта сайта:
Оглавление:
Карта сайта:
Регулярные выражения могут содержать как специальные, так и обычные символы. Обычные символы, например, 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 | Дозволяет описания в регулярных выражениях. Благодаря описаниям иногда шаблоны становятся более читаемыми. Описание можно поместить прямо в шаблон, начав его с #, при этом неэкранированные пробелы в шаблоне игнорируются. |