Второй аргумент флаг flag
в функции re.compile()
может принимать следующие значения:
re.ASCII()
,re.DEBUG
,re.IGNORECASE()
,re.LOCALE()
,re.MULTILINE()
,re.DOTALL()
,re.VERBOSE()
,re.A
, re.ASCII
:Флаг re.A
или re.ASCII
заставляет \w
, \W
, \b
, \B
, \d
, \D
, \s
и \S
выполнить только ASCII соответствие вместо полного соответствия Unicode. Имеет значение только для шаблонов строк Юникода и игнорируется для шаблонов байтов. Соответствует встроенному флагу (?a)
.
Обратите внимание, что для обратной совместимости флаг re.U
все еще существует, как и его синоним re.UNICODE
и его встроенный аналог (?u)
, но они избыточны в Python 3. По умолчанию совпадения являются строками Unicode, а для байтов совпадение Unicode не допускается.
re.DEBUG
:Флаг re.DEBUG
показывает отладочную информацию о скомпилированном выражении. Соответствующего встроенного флага НЕТ.
re.I
, re.IGNORECASE
:Флаг re.I
или re.IGNORECASE
выполняет сопоставление без учета регистра. Выражения типа [A-Z]
также будут соответствовать строчным буквам. Обеспечивает полное соответствие кодировке Unicode (т.е. Й
будет сопоставляться с й
), если только не используется флаг re.ASCII
. Текущий языковой стандарт не изменяет действие этого флага, если только не используется флаг re.LOCALE
. Соответствует встроенному флагу (?i)
.
Обратите внимание, что когда шаблоны Unicode [a-z]
или [A-Z]
используются в сочетании с флагом IGNORECASE
, они будут соответствовать 52 буквам ASCII и 4 дополнительным не-ASCII буквам: 'İ'
- U+0130, Латинская заглавная буква 'I'
с точкой выше, 'ı'
- U+0131, Латинская маленькая буква без точки 'i'
, 'ſ'
- U+017F, Латинская маленькая буква long s) и 'K'
- U+212A, знак Кельвина. Если используется флаг re.ASCII
, то совпадают только буквы a
- z
и A
- Z
.
re.L
, re.LOCALE
:Флаг re.L
или re.LOCALE
делает сопоставление \w
, \W
, \b
, \B
и без учета регистра, зависимым от текущей локали. Этот флаг может использоваться только с шаблонами байтов. Использование этого флага не рекомендуется, так как механизм локализации очень ненадежен и он работает только с 8-битными локалями. Сопоставление Юникода уже включено по умолчанию в Python 3 для шаблонов строк Unicode и способно обрабатывать различные языки/локали. Соответствует встроенному флагу (?L)
.
re.LOCALE
может использоваться только с байтовыми шаблонами и не совместим с флагом re.ASCII
.re.LOCALE
не зависит от локали во время компиляции и влияет на результат сопоставления только в момент сопоставления.re.M
, re.MULTILINE
:'^'
в шаблоне совпадает с позицией начала строки и с позицией начала каждой строки, сразу после каждой новой строки. '$'
совпадает с позицией конца строки и с позицией конца каждой строки, непосредственно перед каждой новой строкой.По умолчанию '^'
совпадает только с позицией начала строки, а '$'
только с позицией конца строки и непосредственно перед новой строкой (если есть) в конце строки. Флаг re.MULTILINE
соответствует встроенному флагу (?m)
.
re.S
, re.DOTALL
:Флаг re.S
или re.DOTALL
делает так, что бы специальный символ '.'
- точка соответствовал любому символу вообще, включая новую строку '\n'
. Без этого флага, специальный символ '.'
- точка будет соответствовать чему угодно, кроме новой строки. Флаг re.DOTALL
соответствует встроенному флагу (?s)
.
re.X
, re.VERBOSE
:Флаг re.X
или re.VERBOSE
позволяет писать регулярные выражения, которые выглядят лучше и удобнее для чтения, позволяя визуально разделять логические разделы шаблона и добавлять комментарии. Пробельные символы в шаблоне игнорируются, за исключением случаев, когда они находятся в символьном классе или когда им предшествует неэкранированная обратная косая черта, или внутри токенов, таких как *?
, (?:
или (?P<...>
. Если строка содержит символ #
, который не входит в символьный класс и которому не предшествует неэкранированная обратная косая черта, то все символы от крайнего левого положения символа #
до конца строки игнорируются.
Это означает, что два следующих объекта регулярного выражения, которые соответствуют десятичному числу, функционально равны:
a = re.compile(r"""\d + # the integral part \. # the decimal point \d * # some fractional digits""", re.X) b = re.compile(r"\d+\.\d*")
Флаг re.VERBOSE
соответствует встроенному флагу (?x)
.