Flag til streng regulære udtryk i Python
For at indstille flag som en af de valgfrie parametre til metoder, der arbejder med regulære udtryk, bruges følgende syntaks:
flags=re.flag_navn
Grundlæggende flag til arbejde med regulære udtryk
| Flag | Formål |
|---|---|
re.IGNORECASE |
Ignorerer store og små bogstaver. |
re.DOTALL |
Punktet matcher ethvert tegn, inklusive linjeskift. |
re.I |
Gør søgningen case-insensitiv. |
re.L |
Søger efter ord i henhold til det aktuelle sprog.
Fortolkningen påvirker den alfabetiske
gruppe (\w og \W), samt
adfærd af ordgrænse (\b og
\B).
|
re.M |
Tegnet $ matcher slutningen af
enhver linje i teksten (ikke kun slutningen af teksten)
og tegnet ^ matcher starten af
enhver linje i teksten (ikke kun i starten
af teksten).
|
re.S |
Ændrer punktets (.) betydning til
at matche ethvert tegn, inklusive ny
linje.
|
re.U |
Fortolker bogstaver i henhold til
Unicode-tegnsættet. Dette flag påvirker
adfærden af \w, \W, \b,
\B. I Python 3+ er dette flag
sat som standard.
|
re.X |
Tillader flerliniers syntaks for regulære
udtryk. Den ignorerer mellemrum inde i
mønsteret (bortset fra mellemrum inde i
en karakterklasse [] eller når de escapes
med omvendt skråstreg) og behandler ikke
escapet '#' som en kommentar.
|
Eksempel
Med flaget re.IGNORECASE kan man
ignorere store og små bogstaver. Lad os
se, hvordan det gøres. I dette eksempel
finder det regulære udtryk kun små bogstaver:
txt = 'aaa bbb CCC DDD'
res = re.sub('[a-z]+', '!', txt)
print(res)
Resultatet af udført kode:
'! ! CCC DDD'
Eksempel
Lad os nu tilføje flaget re.IGNORECASE til den fjerde parameter
i metoden, og det regulære udtryk vil
begynde at søge efter tegn i alle cases:
txt = 'aaa AAA bbb BBB'
res = re.sub('[a-z]+', '!', txt, flags=re.IGNORECASE)
print(res)
Resultatet af udført kode:
'! ! ! !'
Eksempel
Lad os finde alle linjeskift med det regulære udtryk:
txt = '''aaa
bbb'''
res = re.sub('\n', '!', txt)
print(res)
Resultatet af udført kode:
'aaa!bbb'
Eksempel
Men hvis man skal erstatte alle tegn, så vil punktummer i det regulære udtryk ikke fange linjeskift:
txt = '''aaa
bbb'''
res = re.sub('.', '!', txt)
print(res)
Resultatet af udført kode:
'!!!
!!!'
Eksempel
For at rette denne fejl, bør man
anvende flaget re.DOTALL:
res = re.sub('.', '!', txt, flags=re.DOTALL)
print(res)
Resultatet af udført kode:
'!!!!!!!'
Eksempel
I parameteren kan man også sende flere
flag ved at sætte operatoren + mellem dem.
Lad os først erstatte bogstavet 'a'
i slutningen af linjen:
txt = '''
aaa
AAA
aaa'''
res = re.sub('aaa$', '!', txt)
print(res)
Resultatet af udført kode:
'''
aaa
AAA
!
'''
Eksempel
Lad os nu sætte flaget re.M:
res = re.sub('aaa$', '!', txt, flags=re.M)
print(res)
Resultatet af udført kode:
'''
!
AAA
!
'''
Eksempel
Lad os nu anvende flaget for at ignorere store og små bogstaver også:
res = re.sub('aaa$', '!', txt, flags=re.M+re.IGNORECASE)
print(res)
Resultatet af udført kode:
'''
!
!
!
'''