Flags voor regex strings in Python
Om flags als een van de optionele parameters voor methodes die met regex werken in te stellen, gebruiken we de volgende syntaxis:
flags=re.flag_naam
Belangrijkste flags voor het werken met regex
| Flag | Doel |
|---|---|
re.IGNORECASE |
Negeert de hoofd-/kleine letter gevoeligheid van karakters. |
re.DOTALL |
Een punt staat voor elk karakter, inclusief regeloverloop. |
re.I |
Maakt de zoekopdracht niet hoofdlettergevoelig. |
re.L |
Zoekt woorden volgens de huidige taal.
Deze interpretatie heeft invloed op de alfabetische
groep (\w en \W), en ook
op het gedrag van de woordgrens (\b en
\B).
|
re.M |
Het karakter $ zoekt aan het einde
van elke tekstregel (niet alleen het einde van de tekst)
en het karakter ^ zoekt aan het begin
van elke tekstregel (niet alleen aan het begin
van de tekst).
|
re.S |
Verandert de betekenis van de punt (.) naar
overeenkomst met elk karakter, inclusief een nieuwe
regel.
|
re.U |
Interpreteert letters volgens de
Unicode-tekenset. Deze flag beïnvloedt
het gedrag van \w, \W, \b,
\B. In Python 3+ is deze flag
standaard ingesteld.
|
re.X |
Staat multiline syntaxis van de reguliere
expressie toe. Het negeert spaties binnen
het patroon (behalve spaties binnen
een set [] of wanneer afgeschermd
door een backslash) en behandelt een niet
afgeschermde '#' als een opmerking.
|
Voorbeeld
Met de flag re.IGNORECASE kun je
de hoofdlettergevoeligheid negeren. Laten we
bekijken hoe dat wordt gedaan. In dit voorbeeld
vindt de regex alleen kleine letters:
txt = 'aaa bbb CCC DDD'
res = re.sub('[a-z]+', '!', txt)
print(res)
Resultaat van de uitgevoerde code:
'! ! CCC DDD'
Voorbeeld
Laten we nu in de vierde parameter
van de methode de flag re.IGNORECASE toevoegen, dan
gaat de regex karakters in alle hoofdlettergevallen zoeken:
txt = 'aaa AAA bbb BBB'
res = re.sub('[a-z]+', '!', txt, flags=re.IGNORECASE)
print(res)
Resultaat van de uitgevoerde code:
'! ! ! !'
Voorbeeld
Laten we met regex alle regeloverlopen vinden:
txt = '''aaa
bbb'''
res = re.sub('\n', '!', txt)
print(res)
Resultaat van de uitgevoerde code:
'aaa!bbb'
Voorbeeld
Maar, als je alle karakters wilt vervangen, dan worden met een punt in de regex de regeloverlopen niet meegenomen:
txt = '''aaa
bbb'''
res = re.sub('.', '!', txt)
print(res)
Resultaat van de uitgevoerde code:
'!!!
!!!'
Voorbeeld
Om deze fout te herstellen, moet
de flag re.DOTALL worden toegepast:
res = re.sub('.', '!', txt, flags=re.DOTALL)
print(res)
Resultaat van de uitgevoerde code:
'!!!!!!!'
Voorbeeld
In de parameter kunnen ook meerdere
flags worden doorgegeven, door de operator +
tussen hen te plaatsen.
Laten we eerst de letter 'a'
aan het einde van de regel vervangen:
txt = '''
aaa
AAA
aaa'''
res = re.sub('aaa
, '!', txt)
print(res)
Resultaat van de uitgevoerde code:
'''
aaa
AAA
!
'''
Voorbeeld
Laten we nu de flag re.M instellen:
res = re.sub('aaa
, '!', txt, flags=re.M)
print(res)
Resultaat van de uitgevoerde code:
'''
!
AAA
!
'''
Voorbeeld
Laten we nu ook de flag voor het negeren van hoofdlettergevoeligheid toepassen:
res = re.sub('aaa
, '!', txt, flags=re.M+re.IGNORECASE)
print(res)
Resultaat van de uitgevoerde code:
'''
!
!
!
'''