Сцягі для радкоў рэгулярак у 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)
Вынік выкананага кода:
'''
!
!
!
'''