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