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:

pythonflags=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:

pythontxt = 'aaa bbb CCC DDD'
res = re.sub('[a-z]+', '!', txt)

print(res)

Resultatet af udført kode:

python'! ! 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:

pythontxt = 'aaa AAA bbb BBB'
res = re.sub('[a-z]+', '!', txt, flags=re.IGNORECASE)

print(res)

Resultatet af udført kode:

python'! ! ! !'

Eksempel

Lad os finde alle linjeskift med det regulære udtryk:

pythontxt = '''aaa
  bbb'''
res = re.sub('\n', '!', txt)

print(res)

Resultatet af udført kode:

python'aaa!bbb'

Eksempel

Men hvis man skal erstatte alle tegn, så vil punktummer i det regulære udtryk ikke fange linjeskift:

pythontxt = '''aaa
  bbb'''
res = re.sub('.', '!', txt)

print(res)

Resultatet af udført kode:

python'!!!
!!!'

Eksempel

For at rette denne fejl, bør man anvende flaget re.DOTALL:

pythonres = re.sub('.', '!', txt, flags=re.DOTALL)
print(res)

Resultatet af udført kode:

python'!!!!!!!'

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:

pythontxt = '''
  aaa
  AAA
  aaa'''
res = re.sub('aaa$', '!', txt)

print(res)

Resultatet af udført kode:

python'''
  aaa
  AAA
  !
'''

Eksempel

Lad os nu sætte flaget re.M:

pythonres = re.sub('aaa$', '!', txt, flags=re.M)
print(res)

Resultatet af udført kode:

python'''
  !
  AAA
  !
'''

Eksempel

Lad os nu anvende flaget for at ignorere store og små bogstaver også:

pythonres = re.sub('aaa$', '!', txt, flags=re.M+re.IGNORECASE)
print(res)

Resultatet af udført kode:

python'''
  !
  !
  !
'''