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