Флаги для строк регулярок в 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)
Результат выполненного кода:
'''
!
!
!
'''