Regulāro izteiksmju karodziņi Python
Lai iestatītu karodziņus kā vienu no neobligātajiem parametriem metodēm, kas strādā ar regulārām izteiksmēm, izmanto šādu sintaksi:
flags=re.karoga_nosaukums
Galvenie karodziņi darbam ar regulārām izteiksmēm
| Karodziņš | Mērķis |
|---|---|
re.IGNORECASE |
Ignorē rakstzīmju rakstības reģistru. |
re.DOTALL |
Punkts apzīmē jebkuru rakstzīmi, ieskaitot rindas pārnesti. |
re.I |
Padara meklēšanu nejutīgu pret reģistru. |
re.L |
Meklē vārdus atbilstoši pašreizējai valodai.
Šī interpretācija skar alfabētisko
grupumu (\w un \W), kā arī
vārda robežas uzvedību (\b un
\B).
|
re.M |
Simbols $ veic meklēšanu jebkuras
teksta rindas beigās (ne tikai teksta beigās)
un simbols ^ veic meklēšanu jebkuras
teksta rindas sākumā (ne tikai teksta sākumā).
|
re.S |
Maina punkta (.) nozīmi uz
atbilstību jebkuram simbolam, ieskaitot jaunu
rindu.
|
re.U |
Interpretē burtus atbilstoši
Unicode rakstzīmju kopai. Šis karodziņš ietekmē
\w, \W, \b,
\B uzvedību. Python 3+ šis karodziņš
ir iestatīts pēc noklusējuma.
|
re.X |
Atļauj daudzrindu regulārās izteiksmes
sintaksi. Tas ignorē atstarpes raksta iekšienē
(izņemot atstarpes kopas iekšienē [] vai ar
apgriezto slīpsvītru ekrēnojot) un apstrādā
neekrēnotu '#' kā komentāru.
|
Piemērs
Izmantojot karodziņu re.IGNORECASE, var
ignorēt rakstzīmju reģistru. Apskatīsim,
kā tas tiek darīts. Šajā piemērā
regulārā izteiksme atradīs tikai mazos burtus:
txt = 'aaa bbb CCC DDD'
res = re.sub('[a-z]+', '!', txt)
print(res)
Koda izpildes rezultāts:
'! ! CCC DDD'
Piemērs
Un tagad pievienosim ceturtajā parametrā
metoda karodziņu re.IGNORECASE, un regulārā izteiksme
sāks meklēt rakstzīmes visos reģistros:
txt = 'aaa AAA bbb BBB'
res = re.sub('[a-z]+', '!', txt, flags=re.IGNORECASE)
print(res)
Koda izpildes rezultāts:
'! ! ! !'
Piemērs
Atrast ar regulāro izteiksmi visus rindu pārnešus:
txt = '''aaa
bbb'''
res = re.sub('\n', '!', txt)
print(res)
Izpildītā koda rezultāts:
'aaa!bbb'
Piemērs
Bet, ja nepieciešams aizstāt visus simbolus, tad ievietojot regulārajā izteiksmē punktu, netiks noķerti rindu pārnešumi:
txt = '''aaa
bbb'''
res = re.sub('.', '!', txt)
print(res)
Izpildītā koda rezultāts:
'!!!
!!!'
Piemērs
Lai izlabotu šo kļūdu, vajadzētu
piemērot karodziņu re.DOTALL:
res = re.sub('.', '!', txt, flags=re.DOTALL)
print(res)
Izpildītā koda rezultāts:
'!!!!!!!'
Piemērs
Parametrā var padot arī vairākus
karodziņus, ievietojot starp tiem operatoru +.
Vispirms aizstāsim burtu 'a'
rindas beigās:
txt = '''
aaa
AAA
aaa'''
res = re.sub('aaa$', '!', txt)
print(res)
Izpildītā koda rezultāts:
'''
aaa
AAA
!
'''
Piemērs
Tagad iestatīsim karodziņu re.M:
res = re.sub('aaa$', '!', txt, flags=re.M)
print(res)
Izpildītā koda rezultāts:
'''
!
AAA
!
'''
Piemērs
Tagad pielietosim vēl karodziņu reģistra ignorēšanai:
res = re.sub('aaa$', '!', txt, flags=re.M+re.IGNORECASE)
print(res)
Izpildītā koda rezultāts:
'''
!
!
!
'''