A reguláris kifejezések flag-jei Pythonban
A flag-ek egyik opcionális paraméterként való megadásához a reguláris kifejezésekkel működő metódusoknál a következő szintaxist használjuk:
flags=re.flag neve
Alapvető flag-ek a reguláris kifejezésekhez
| Flag | Feladat |
|---|---|
re.IGNORECASE |
A karakterek nagybetű/kisbetű érzékenységének figyelmen kívül hagyása. |
re.DOTALL |
A pont bármely karaktert jelöl, beleértve a soremelést is. |
re.I |
Kis- és nagybetűket nem megkülönböztető keresést végez. |
re.L |
A szavakat az aktuális nyelvnek megfelelően keresi.
Ez az értelmezés az ábécé csoportot érinti
(\w és \W), valamint
a szóhatár viselkedését (\b és
\B).
|
re.M |
A $ karakter a szöveg bármely sorának
végén keres (nem csak a szöveg végén),
és a ^ karakter a szöveg bármely sorának
elején keres (nem csak a szöveg elején).
|
re.S |
Megváltoztatja a pont (.) jelentését
úgy, hogy az bármely karakterre illeszkedik, beleértve az újsor
karaktert is.
|
re.U |
A betűket a Unicode karakterkészlet szerint értelmezi.
Ez a flag befolyásolja a \w, \W, \b,
\B viselkedését.
A Python 3+ verzióiban ez a flag
alapértelmezetten be van állítva.
|
re.X |
Lehetővé teszi a reguláris kifejezés
többsoros szintaxisát. Figyelmen kívül hagyja a szóközöket a
mintán belül (kivéve a [] halmazon belüli szóközöket
vagy a visszaperjellel escape-elt szóközöket), és a nem
escape-elt '#' karaktert megjegyzésként kezeli.
|
Példa
A re.IGNORECASE flag segítségével
figyelmen kívül hagyhatjuk a karakterek nagybetű/kisbetű érzékenységét. Nézzük meg,
hogyan is történik ez. Ebben a példában
a reguláris kifejezés csak a kisbetűket találja meg:
txt = 'aaa bbb CCC DDD'
res = re.sub('[a-z]+', '!', txt)
print(res)
A kód végrehajtásának eredménye:
'! ! CCC DDD'
Példa
Most adjuk hozzá a metódus negyedik paraméteréhez
a re.IGNORECASE flag-et, és a reguláris kifejezés
minden kis- és nagybetűben megkeresi a karaktereket:
txt = 'aaa AAA bbb BBB'
res = re.sub('[a-z]+', '!', txt, flags=re.IGNORECASE)
print(res)
A kód végrehajtásának eredménye:
'! ! ! !'
Példa
Keressük meg a reguláris kifejezéssel az összes soremelést:
txt = '''aaa
bbb'''
res = re.sub('\n', '!', txt)
print(res)
A kód végrehajtásának eredménye:
'aaa!bbb'
Példa
De ha az összes karaktert le szeretnénk cserélni, akkor a reguláris kifejezésben pontot használva a soremelések nem kerülnek bele:
txt = '''aaa
bbb'''
res = re.sub('.', '!', txt)
print(res)
A kód végrehajtásának eredménye:
'!!!
!!!'
Példa
A hiba javításához használjuk
a re.DOTALL flag-et:
res = re.sub('.', '!', txt, flags=re.DOTALL)
print(res)
A kód végrehajtásának eredménye:
'!!!!!!!'
Példa
A paraméterben több
flag-et is átadhatunk, közéjük egy + operátort téve.
Először cseréljük le az 'a' betűt
a sor végén:
txt = '''
aaa
AAA
aaa'''
res = re.sub('aaa$', '!', txt)
print(res)
A kód végrehajtásának eredménye:
'''
aaa
AAA
!
'''
Példa
Most állítsuk be a re.M flag-et:
res = re.sub('aaa$', '!', txt, flags=re.M)
print(res)
A kód végrehajtásának eredménye:
'''
!
AAA
!
'''
Példa
Most alkalmazzuk a kis- és nagybetűk figyelmen kívül hagyására szolgáló flag-et is:
res = re.sub('aaa$', '!', txt, flags=re.M+re.IGNORECASE)
print(res)
A kód végrehajtásának eredménye:
'''
!
!
!
'''