Сообщить об ошибке.

Флаги, используемые в функции re.compile()

Флаги, используемые для компиляции регулярного выражения

Второй аргумент флаг flag в функции re.compile() может принимать следующие значения:

Содержание:


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).