Flagg for strengregulære uttrykk i Python
For å sette flagg som en av de valgfrie parameterne for metoder som arbeider med regulære uttrykk, brukes følgende syntaks:
flags=re.flagnavn
Hovedflagg for arbeid med regulære uttrykk
| Flagg | Formål |
|---|---|
re.IGNORECASE |
Ignorerer store og små bokstaver. |
re.DOTALL |
Punktum betegner ethvert tegn, inkludert linjeskift. |
re.I |
Gjør søket ufølsomt for store/små bokstaver. |
re.L |
Søker etter ord i henhold til gjeldende språk.
Denne tolkningen påvirker den alfabetiske
gruppen (\w og \W), samt
oppførselen til ordgrensen (\b og
\B).
|
re.M |
Tegnet $ utfører søk på slutten av
enhver linje med tekst (ikke bare slutten av teksten)
og tegnet ^ utfører søk i begynnelsen av
enhver linje med tekst (ikke bare i begynnelsen av
teksten).
|
re.S |
Endrer betydningen av punktum (.) til
samsvar med ethvert tegn, inkludert ny
linje.
|
re.U |
Tolker bokstaver i henhold til
Unicode-tegnsettet. Dette flagget påvirker
oppførselen til \w, \W, \b,
\B. I Python 3+ er dette flagget
satt som standard.
|
re.X |
Tillater flerlinjet syntaks for regulært
uttrykk. Den ignorerer mellomrom inni
mønsteret (bortsett fra mellomrom inni
settet [] eller når de escapes
med omvendt skråstrek) og behandler ikke
escapet '#' som en kommentar.
|
Eksempel
Med flagget re.IGNORECASE kan man
ignorere store/små bokstaver. La oss
se hvordan dette gjøres. I dette eksempelet
vil det regulære uttrykket bare finne små bokstaver:
txt = 'aaa bbb CCC DDD'
res = re.sub('[a-z]+', '!', txt)
print(res)
Resultatet av utført kode:
'! ! CCC DDD'
Eksempel
Og nå legger vi til i den fjerde parameteren
til metoden flagget re.IGNORECASE, og det regulære uttrykket
vil begynne å søke etter tegn i alle store/små bokstaver:
txt = 'aaa AAA bbb BBB'
res = re.sub('[a-z]+', '!', txt, flags=re.IGNORECASE)
print(res)
Resultatet av utført kode:
'! ! ! !'
Eksempel
La oss finne alle linjeskift med regulært uttrykk:
txt = '''aaa
bbb'''
res = re.sub('\n', '!', txt)
print(res)
Resultatet av utført kode:
'aaa!bbb'
Eksempel
Men hvis man trenger å erstatte absolutt alle tegn, så vil ikke linjeskift fanges opp ved å sette et punktum i det regulære uttrykket:
txt = '''aaa
bbb'''
res = re.sub('.', '!', txt)
print(res)
Resultatet av utført kode:
'!!!
!!!'
Eksempel
For å rette opp denne feilen, bør man
bruke flagget re.DOTALL:
res = re.sub('.', '!', txt, flags=re.DOTALL)
print(res)
Resultatet av utført kode:
'!!!!!!!'
Eksempel
I parameteren kan man også sende flere
flagg, ved å sette operatoren + mellom dem.
La oss først erstatte bokstaven 'a'
på slutten av linjen:
txt = '''
aaa
AAA
aaa'''
res = re.sub('aaa$', '!', txt)
print(res)
Resultatet av utført kode:
'''
aaa
AAA
!
'''
Eksempel
Nå setter vi flagget re.M:
res = re.sub('aaa$', '!', txt, flags=re.M)
print(res)
Resultatet av utført kode:
'''
!
AAA
!
'''
Eksempel
La oss nå bruke også flagget for å ignorere store/små bokstaver:
res = re.sub('aaa$', '!', txt, flags=re.M+re.IGNORECASE)
print(res)
Resultatet av utført kode:
'''
!
!
!
'''