======Введение===== Регулярные выражения могут содержать как специальные, так и обычные символы. Обычные символы, например, 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}?'' |Добавление ''?'' к указанным описателям делает их нежадными, т.е. они станут описывать как можно меньшее количество символов. Сравните: под '' <.+> '' подпадёт вся строка '' b '', в то время, как под '' <.+?> '' — только '' ''.| | | | | |**Группировка** | |''(x)'' |Задаёт группу, в которую должно попасть выражение ''x'', к которой можно обращаться в дальнейшем по индексу — ''\1'' (если группа имеет номер 1).| |''(?Px)'' |Задаёт группу с именем ''name'', в которую должно попасть выражение ''x''. Групп в дальнейшем можно адресовать как по указанному имени, так и по индексу — ''(?P=name)'' или ''\1'' (если группа имеет номер 1).| |''(?:x)'' |Задаёт группу, в которую должно попасть выражение ''x'', к которой нельзя будет обратиться в дальнейшем ни по индексу, ни по имени.| |''(?#…)'' |Комментарий. При разборе выражения будет проигнорирован.| | | | | |**Условия** | |''x(?=y)'' |Описывает выражение ''x'' только если за ним следует ''y''. Например: ''маршал (?=Жуков)'' обнаружит ''маршал '' в строке ''маршал Жуков'', но не в ''маршал Конев''.| |''x(?!y)'' |Описывает выражение ''x'' только если за ним не следует ''y''. Например: ''маршал (?!Жуков)'' обнаружит ''маршал '' в строке ''маршал Конев'', но не в ''маршал Жуков''.| |''x(?<=y)'' |Описывает выражение ''y'' только если ему предшествует ''x''. Например: ''(?<=маршал) Жуков'' обнаружит '' Жуков'' в строке ''маршал Жуков'', но не в ''капитан Жуков''. **Внимание:** использование количественных описателей не поддерживается, требуются строки фиксированной длины.| |''x(?товарищ)?(?(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|Дозволяет описания в регулярных выражениях. Благодаря описаниям иногда шаблоны становятся более читаемыми. Описание можно поместить прямо в шаблон, начав его с #, при этом неэкранированные пробелы в шаблоне игнорируются.|