Python reguliariųjų išraiškų eilučių vėliavos
Norint nustatyti vėliavas kaip vieną iš neprivalomų parametrų metodams, dirbantiems su reguliariosiomis išraiškomis, naudojamas toks sintaksis:
flags=re.vėliavos_pavadinimas
Pagrindinės vėliavos dirbant su reguliariosiomis išraiškomis
| Vėliava | Paskirtis |
|---|---|
re.IGNORECASE |
Ignoruojami simbolių rašymo registro skirtumai. |
re.DOTALL |
Taškas žymi bet kurį simbolį, įskaitant ir eilutės lūžį. |
re.I |
Paieška tampa nejautri registrui. |
re.L |
Ieško žodžių pagal dabartinę kalbą.
Ši interpretacija liečia abėcėlinę
grupę (\w ir \W), taip pat
žodžio ribos elgesį (\b ir
\B).
|
re.M |
Simbolis $ atlieka paiešką bet kurios
teksto eilutės pabaigoje (ne tik teksto pabaigoje)
o simbolis ^ atlieka paiešką bet kurios
teksto eilutės pradžioje (ne tik teksto pradžioje).
|
re.S |
Pakeičia taško (.) reikšmę į
atitikimą su bet kuriuo simboliu, įskaitant naują
eilutę.
|
re.U |
Interpretuoja raides pagal
Unicode simbolių rinkinį. Ši vėliava daro įtaką
\w, \W, \b,
\B elgesiui. Python 3+ ši vėliava
nustatyta pagal nutylėjimą.
|
re.X |
Leidžia daugiaeilį reguliariosios išraiškos
sintaksę. Jis ignoruoja tarpus šablono viduje
(išskyrus tarpus aibės viduje [] arba kai
ekranuojami atgaliniu pasviruoju brūkšniu) ir ne
ekranuotą '#' traktuoja kaip komentarą.
|
Pavyzdys
Naudojant vėliavą re.IGNORECASE galima
ignoruoti simbolių registrą. Pažiūrėkime,
kaip tai daroma. Šiame pavyzdyje
reguliarioji išraiška ras tik mažąsias raides:
txt = 'aaa bbb CCC DDD'
res = re.sub('[a-z]+', '!', txt)
print(res)
Kodo vykdymo rezultatas:
'! ! CCC DDD'
Pavyzdys
Dabar pridėkime į ketvirtą metodo parametrą
vėliavą re.IGNORECASE ir reguliarioji išraiška
pradės ieškoti simbolių visuose registruose:
txt = 'aaa AAA bbb BBB'
res = re.sub('[a-z]+', '!', txt, flags=re.IGNORECASE)
print(res)
Kodo vykdymo rezultatas:
'! ! ! !'
Pavyzdys
Suraskime reguliariąja išraiška visus eilučių lūžius:
txt = '''aaa
bbb'''
res = re.sub('\n', '!', txt)
print(res)
Vykdyto kodo rezultatas:
'aaa!bbb'
Pavyzdys
Bet, jei reikia pakeisti visus simbolius, tada, sudėjus tašką reguliariojoje išraiškoje, nebus perimti eilučių lūžiai:
txt = '''aaa
bbb'''
res = re.sub('.', '!', txt)
print(res)
Vykdyto kodo rezultatas:
'!!!
!!!'
Pavyzdys
Norint ištaisyti šią klaidą, reikia
taikyti vėliavą re.DOTALL:
res = re.sub('.', '!', txt, flags=re.DOTALL)
print(res)
Vykdyto kodo rezultatas:
'!!!!!!!'
Pavyzdys
Parametre galima perduoti ir kelias
vėliavas, sudėjus tarp jų operatorių +.
Pirmiausia pakeiskime raidę 'a'
eilutės pabaigoje:
txt = '''
aaa
AAA
aaa'''
res = re.sub('aaa$', '!', txt)
print(res)
Vykdyto kodo rezultatas:
'''
aaa
AAA
!
'''
Pavyzdys
Dabar nustatykime vėliavą re.M:
res = re.sub('aaa$', '!', txt, flags=re.M)
print(res)
Vykdyto kodo rezultatas:
'''
!
AAA
!
'''
Pavyzdys
Dabar taikykime ir vėliavą registro ignoravimui:
res = re.sub('aaa$', '!', txt, flags=re.M+re.IGNORECASE)
print(res)
Vykdyto kodo rezultatas:
'''
!
!
!
'''