Regulaaravaldiste lipud Pythonis
Flag'ide määramiseks ühe mittekohustusliku parameetrina meetoditele, mis töötavad regulaaravaldistega, kasutatakse järgmist süntaksit:
flags=re.lipu_nimi
Peamised lipud regulaaravaldistega töötamiseks
| Lipp | Eesmärk |
|---|---|
re.IGNORECASE |
Tähemärkide kirjatüübi (suur- ja väiketähed) ignoreerimine. |
re.DOTALL |
Punkt tähistab suvalist märki, kaasa arvatud reavahetusmärki. |
re.I |
Teeb otsingu mitterahustuvaks kirjatüübile. |
re.L |
Otsib sõnu vastavalt keelele.
See tõlgendus mõjutab tähestikulist
rühma (\w ja \W), samuti
sõnapiiri käitumist (\b ja
\B).
|
re.M |
Märk $ sooritab otsingu mis tahes
rea lõpus (mitte ainult teksti lõpus)
ja märk ^ sooritab otsingu mis tahes
rea alguses (mitte ainult teksti
alguses).
|
re.S |
Muudab punkti (.) väärtuse
sobivaks mis tahes märgiga, kaasa arvatud uue
rea märgiga.
|
re.U |
Tõlgendab tähti vastavalt
Unicode'i märgistikule. See lipp mõjutab
\w, \W, \b,
\B käitumist. Pythonis 3+ on see lipp
vaikimisi seatud.
|
re.X |
Võimaldab mitmerealist regulaaravaldise
süntaksit. See ignoreerib tühikuid mustri sees
(välja arvatud tühikud komplekti [] sees
või kui need on kaitstud
kurakaldkriipsuga) ja käsitleb
kaitstemata '#' märki kommentaarina.
|
Näide
Lippu re.IGNORECASE saab kasutada
tähemärkide kirjatüübi ignoreerimiseks. Vaatame,
kuidas seda tehakse. Selles näites
leiab regulaaravaldis ainult väiketähed:
txt = 'aaa bbb CCC DDD'
res = re.sub('[a-z]+', '!', txt)
print(res)
Koodi täitmise tulemus:
'! ! CCC DDD'
Näide
Nüüd lisame meetodi neljandale parameetrile
lipu re.IGNORECASE ja regulaaravaldis
hakkab otsima märke kõikides kirjatüüpides:
txt = 'aaa AAA bbb BBB'
res = re.sub('[a-z]+', '!', txt, flags=re.IGNORECASE)
print(res)
Koodi täitmise tulemus:
'! ! ! !'
Näide
Leiame regulaaravaldisega kõik reavahetused:
txt = '''aaa
bbb'''
res = re.sub('\n', '!', txt)
print(res)
Koodi täitmise tulemus:
'aaa!bbb'
Näide
Kuid kui on vaja asendada kõik märgid, siis pannes regulaaravaldises punkti, ei haara see reavahetusi:
txt = '''aaa
bbb'''
res = re.sub('.', '!', txt)
print(res)
Koodi täitmise tulemus:
'!!!
!!!'
Näide
Vea parandamiseks tuleks
rakendada lippu re.DOTALL:
res = re.sub('.', '!', txt, flags=re.DOTALL)
print(res)
Koodi täitmise tulemus:
'!!!!!!!'
Näide
Parameetrisse saab edastada ka mitu
lippu, pannes nende vahele operaatori +.
Kõigepealt asendame rea lõpus oleva tähe 'a':
txt = '''
aaa
AAA
aaa'''
res = re.sub('aaa
', '!', txt)
print(res)
Koodi täitmise tulemus:
'''
aaa
AAA
!
'''
Näide
Nüüd paneme lipu re.M:
res = re.sub('aaa
', '!', txt, flags=re.M)
print(res)
Koodi täitmise tulemus:
'''
!
AAA
!
'''
Näide
Rakendame nüüd ka kirjatüübi ignoreerimise lipu:
res = re.sub('aaa
', '!', txt, flags=re.M+re.IGNORECASE)
print(res)
Koodi täitmise tulemus:
'''
!
!
!
'''