Säännöllisten lausekkeiden liput Pythonissa
Asettaaksesi liput yhdeksi valinnaisista parametreista menetelmiä varten, jotka toimivat säännöllisillä lausekkeilla, käytetään seuraavaa syntaksia:
flags=re.lippu_nimi
Tärkeimmät säännöllisten lausekkeiden liput
| Lippu | Tarkoitus |
|---|---|
re.IGNORECASE |
Merkkien kirjainkoon unohtaminen. |
re.DOTALL |
Piste tarkoittaa mitä tahansa merkkiä, mukaan lukien rivinvaihto. |
re.I |
Tekee hausta kirjainkoon suhteen herkättömän. |
re.L |
Etsii sanoja nykyisen kielen mukaisesti.
Tämä tulkinta koskee aakkosryhmää
(\w ja \W), sekä
sananrajan käyttäytymistä (\b ja
\B).
|
re.M |
Merkki $ suorittaa haun minkä tahansa
tekstirivin lopussa (ei vain tekstin lopussa)
ja merkki ^ suorittaa haun minkä tahansa
tekstirivin alussa (ei vain tekstin
alussa).
|
re.S |
Muuttaa pisteen (.) merkityksen
vastaamaan mitä tahansa merkkiä, mukaan lukien uusi
rivi.
|
re.U |
Tulkitsee kirjaimet Unicode-merkistön mukaisesti.
Tämä lippu vaikuttaa
käyttäytymiseen \w, \W, \b,
\B. Pythonissa 3+ tämä lippu
on oletusarvoisesti asennettuna.
|
re.X |
Sallii monirivisen säännöllisen lausekkeen
syntaksin. Se unohtaa välilyönnit
mallineen sisällä (lukuun ottamatta välilyöntejä
joukon [] sisällä tai kun ne on
suojattu kenoviivalla) ja käsittelee
suojaamattoman '#' kommenttina.
|
Esimerkki
Lipulla re.IGNORECASE voidaan
ohittaa merkkien kirjainkoko. Katsotaanpa,
kuinka se tehdään. Tässä esimerkissä
säännöllinen lauseke löytää vain pienaakkoset:
txt = 'aaa bbb CCC DDD'
res = re.sub('[a-z]+', '!', txt)
print(res)
Koodin suorituksen tulos:
'! ! CCC DDD'
Esimerkki
Lisätään nyt menetelmän neljänteen parametriin
lippu re.IGNORECASE ja säännöllinen lauseke
alkaa etsiä merkkejä kaikista kirjainkooista:
txt = 'aaa AAA bbb BBB'
res = re.sub('[a-z]+', '!', txt, flags=re.IGNORECASE)
print(res)
Koodin suorituksen tulos:
'! ! ! !'
Esimerkki
Etsitään säännöllisellä lausekkeella kaikki rivinvaihdot:
txt = '''aaa
bbb'''
res = re.sub('\n', '!', txt)
print(res)
Suoritetun koodin tulos:
'aaa!bbb'
Esimerkki
Mutta, jos täytyy korvata lähes kaikki merkit, niin asettamalla säännölliseen lausekkeeseen pisteen, rivinvaihdot eivät tule mukaan:
txt = '''aaa
bbb'''
res = re.sub('.', '!', txt)
print(res)
Suoritetun koodin tulos:
'!!!
!!!'
Esimerkki
Korjatakseen tämän virheen, tulee
käyttää lippua re.DOTALL:
res = re.sub('.', '!', txt, flags=re.DOTALL)
print(res)
Suoritetun koodin tulos:
'!!!!!!!'
Esimerkki
Parametriin voidaan välittää myös useita
lippuja, laittamalla niiden väliin operaattori +.
Korvataan ensin kirjain 'a'
rivin lopussa:
txt = '''
aaa
AAA
aaa'''
res = re.sub('aaa
, '!', txt)
print(res)
Suoritetun koodin tulos:
'''
aaa
AAA
!
'''
Esimerkki
Asetetaan nyt lippu re.M:
res = re.sub('aaa
, '!', txt, flags=re.M)
print(res)
Suoritetun koodin tulos:
'''
!
AAA
!
'''
Esimerkki
Käytetään nyt myös lippua kirjainkoon unohtamiseen:
res = re.sub('aaa
, '!', txt, flags=re.M+re.IGNORECASE)
print(res)
Suoritetun koodin tulos:
'''
!
!
!
'''