АКЦИЯ: бесплатные месячные курсы по созданию сайтов
на выбор: верстка, JavaScript, PHP или фреймворки. Сегодня последний день для записи! Жми!
⊗pyPmRESF 73 of 129 menu
Бесплатная Тренировка Верстки. Приглашаются желающие поверстать!

Флаги для строк регулярок в 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)

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

''' ! ! ! '''
enru