Флаги объекта регулярного выражения позволяют изменить некоторые аспекты работы регулярных выражений. Флаги доступны при компиляции шаблона регулярного выражения модуля re
под двумя именами: длинное имя, например, re.IGNORECASE
и короткая однобуквенная форма, например re.I
. Несколько флагов в функции компиляции re.compile()
могут быть заданы побитовым ИЛИ, например re.I | re.M
.
re.I
, re.IGNORECASE
:Флаг re.IGNORECASE
выполняет сопоставление без учета регистра. Класс символов и буквенные строки будут соответствовать буквам, игнорируя регистр. Например шаблону [A-Z]
тоже будут соответствовать строчные буквы. То есть строка 'Spam'
будет соответствовать 'Spam'
, 'spam'
или 'spAM'
. Этот флаг не учитывает текущую локаль, но локаль будет учитываться, если также установите флаг re.LOCALE
.
re.L
, re.LOCALE
:Флаг re.LOCALE
делает метасимволы \w
, \W
, \b
и \B
зависимыми от текущей локали, а не от базы данных Unicode.
Локали - это функция библиотеки языка C
, предназначенная для написания программ, учитывающих языковые различия. Например, если обрабатывается текст на русском языке, то необходимо иметь возможность чтобы \w+
соответствовало словам, но \w
соответствует только классу символов [A-Za-z] и не будет соответствовать й
или "ё". Если система настроена правильно и выбран русский язык, некоторые функции языка C
сообщат программе, что й
также следует считать буквой. Установка флага re.LOCALE
при компиляции регулярного выражения приведет к тому, что результирующий скомпилированный объект будет использовать эти функции C
для \w
. Компиляция будет происходить медленнее, но также позволяет \w+
сопоставлять русские слова, как и ожидается.
re.M
, re.MULTILINE
:Об обозначении и использовании метасимволов '^'
и '$'
смотрите в разделе "Дополнительные метасимволы"
Обычно метасимвол '^'
совпадает только с началом строки, а '$'
совпадает только с концом строки и непосредственно перед новой строкой, если таковая имеется в конце строки. Когда задан флаг re.MULTILINE
, '^'
совпадает в начале строки и в начале каждой строки в строке, сразу после каждой новой строки. Аналогично метасимвол '$'
совпадает либо в конце строки, либо в конце каждой строки, непосредственно перед каждой новой строкой.
re.NOFLAG
:Указывает, что флаг не применяется, значение равно 0. Этот флаг может использоваться как значение по умолчанию для ключевого аргумента функции или как базовое значение, которое будет условно объединено с другими флагами. Пример использования в качестве значения по умолчанию:
def myfunc(text, flag=re.NOFLAG): return re.match(text, flag)
Новое в Python 3.11.
re.S
, re.DOTALL
:Флаг re.DOTALL
заставляет специальный символ '.'
соответствовать любому символу вообще, включая перевод строки '\n'
. Без этого флага '.'
будет соответствовать все, кроме новой строки.
re.A
, re.ASCII
:Флаг re.ASCII
заставляет \w
, \W
, \b
, \B
, \s
и \S
выполнять только ASCII-сопоставление вместо полного соответствия Unicode. Это имеет значение только для шаблонов Юникода и игнорируется для шаблонов байтов.
re.X
, re.VERBOSE
:Флаг re.VERBOSE
позволяет писать регулярные выражения, которые будут более читабельными, предоставляя больше гибкости в оформлении и форматировании. Когда флаг указан, пробел в строке регулярного выражения игнорируется, за исключением случаев, когда этот пробел находится в классе символов или ему предшествует не экранированный обратный слеш. Это позволяет более четко организовать отступы в шаблонах RegExp. Флаг re.VERBOSE
также позволяет помещать комментарии в шаблоны с RegExp, которые будут игнорироваться движком. Комментарии помечаются символом '#'
.
Пример шаблона с регулярным выражением, которое использует флаг re.VERBOSE
:
charref = re.compile(r""" &[#] # Start of a numeric entity reference ( 0[0-7]+ # Octal form | [0-9]+ # Decimal form | x[0-9a-fA-F]+ # Hexadecimal form ) ; # Trailing semicolon """, re.VERBOSE)