# Флаги для строк регулярок в Python

Чтобы задать флаги как один из необязательных параметров для методов, работающих с регулярками, используют следующий синтаксис:

`flags=re.имя флага`

## Основные флаги для работы с регулярками

Флаг | Назначение
--- | ---
`re.IGNORECASE` | Игнорирование регистра написания символов.
`re.DOTALL` | Точка обозначает любой символ, включая и перенос строки.
`re.I` | Делает поиск нечувствительным к регистру.
`re.L` | Ищет слова в соответствии с текущим языком. Эта интерпретация затрагивает алфавитную группу (`\w` и `\W`), а также поведение границы слова (`\b` и `\B`).
`re.M` | Символ `$` выполняет поиск в конце любой строки текста (не только конце текста) и символ `^` выполняет поиск в начале любой строки текста (не только в начале текста).
`re.S` | Изменяет значение точки `(.)` на совпадение с любым символом, включая новую строку.
`re.U` | Интерпретирует буквы в соответствии с набором символов Unicode. Этот флаг влияет на поведение `\w`, `\W`, `\b`, `\B`. В Python `3`+ этот флаг установлен по умолчанию.
`re.X` | Позволяет многострочный синтаксис регулярного выражения. Он игнорирует пробелы внутри паттерна (за исключением пробелов внутри набора `[]` или при экранировании обратным слешем) и обрабатывает не экранированный `'#'` как комментарий.

## Пример

С помощью флага `re.IGNORECASE` можно игнорировать регистр символов. Давайте посмотрим, как это делается. В этом примере регулярка найдет только маленькие буквы:

`txt = 'aaa bbb CCC DDD' res = re.sub('[a-z]+', '!', txt) print(res)`

Результат выполнения кода:

`'! ! CCC DDD'`

## Пример

А теперь добавим в четвертый параметр метода флаг `re.IGNORECASE` и регулярка начнет искать символы во всех регистрах:

`txt = 'aaa AAA bbb BBB' res = re.sub('[a-z]+', '!', txt, flags=re.IGNORECASE) print(res)`

Результат выполнения кода:

`'! ! ! !'`

## Пример

Давайте найдем регуляркой все переносы строки:

`txt = '''aaa bbb''' res = re.sub('\n', '!', txt) print(res)`

Результат выполненного кода:

`'aaa!bbb'`

## Пример

Но, если нужно заменить вообще все символы, то поставив в регулярке точку, не захватятся переносы строки:

`txt = '''aaa bbb''' res = re.sub('.', '!', txt) print(res)`

Результат выполненного кода:

`'!!! !!!'`

## Пример

Чтобы исправить данную ошибку, следует применить флаг `re.DOTALL`:

`res = re.sub('.', '!', txt, flags=re.DOTALL) print(res)`

Результат выполненного кода:

`'!!!!!!!'`

## Пример

В параметре можно передать и несколько флагов, поставив между ними оператор `+`. Давайте сначала заменим букву `'a'` в конце строки:

`txt = ''' aaa AAA aaa''' res = re.sub('aaa$', '!', txt) print(res)`

Результат выполненного кода:

`''' aaa AAA ! '''`

## Пример

Теперь поставим флаг `re.M`:

`res = re.sub('aaa$', '!', txt, flags=re.M) print(res)`

Результат выполненного кода:

`''' ! AAA ! '''`

## Пример

Давайте теперь применим еще и флаг для игнорирования регистра:

`res = re.sub('aaa$', '!', txt, flags=re.M+re.IGNORECASE) print(res)`

Результат выполненного кода:

`''' ! ! ! '''`
← →
↑