Flags für Regex-Strings in Python
Um Flags als einen der optionalen Parameter für Methoden, die mit regulären Ausdrücken arbeiten, zu setzen, verwendet man die folgende Syntax:
flags=re.Flaggenname
Hauptflags für die Arbeit mit regulären Ausdrücken
| Flag | Zweck |
|---|---|
re.IGNORECASE |
Ignoriert die Groß-/Kleinschreibung von Zeichen. |
re.DOTALL |
Der Punkt steht für beliebige Zeichen, einschließlich Zeilenumbrüchen. |
re.I |
Macht die Suche case-insensitive (groß-/kleinschreibungsunabhängig). |
re.L |
Durchsucht Wörter entsprechend der aktuellen Sprache.
Diese Interpretation betrifft die alphabetische
Gruppe (\w und \W) sowie
das Verhalten der Wortgrenze (\b und
\B).
|
re.M |
Das Zeichen $ sucht am Ende
jeder Textzeile (nicht nur am Textende)
und das Zeichen ^ sucht am Anfang
jeder Textzeile (nicht nur am Textanfang).
|
re.S |
Ändert die Bedeutung des Punkts (.) auf
Übereinstimmung mit jedem Zeichen, einschließlich neuer
Zeilen.
|
re.U |
Interpretiert Buchstaben gemäß dem
Unicode-Zeichensatz. Dieses Flag beeinflusst
das Verhalten von \w, \W, \b,
\B. In Python 3+ ist dieses Flag
standardmäßig gesetzt.
|
re.X |
Ermöglicht eine mehrzeilige Syntax für reguläre
Ausdrücke. Es ignoriert Leerzeichen innerhalb
des Patterns (außer Leerzeichen innerhalb
einer Zeichenklasse [] oder wenn sie
mit einem Backslash maskiert sind) und behandelt nicht
maskierte '#' als Kommentare.
|
Beispiel
Mit dem Flag re.IGNORECASE kann man
die Groß-/Kleinschreibung von Zeichen ignorieren. Lasst uns
ansehen, wie das gemacht wird. In diesem Beispiel
findet der reguläre Ausdruck nur Kleinbuchstaben:
txt = 'aaa bbb CCC DDD'
res = re.sub('[a-z]+', '!', txt)
print(res)
Ergebnis der Codeausführung:
'! ! CCC DDD'
Beispiel
Fügen wir nun im vierten Parameter
der Methode das Flag re.IGNORECASE hinzu und der reguläre Ausdruck
beginnt, Zeichen in allen Groß-/Kleinschreibungsvarianten zu suchen:
txt = 'aaa AAA bbb BBB'
res = re.sub('[a-z]+', '!', txt, flags=re.IGNORECASE)
print(res)
Ergebnis der Codeausführung:
'! ! ! !'
Beispiel
Lasst uns alle Zeilenumbrüche mit einem regulären Ausdruck finden:
txt = '''aaa
bbb'''
res = re.sub('\n', '!', txt)
print(res)
Ergebnis des ausgeführten Codes:
'aaa!bbb'
Beispiel
Aber wenn man alle Zeichen ersetzen möchte, dann werden mit einem Punkt in der Regex keine Zeilenumbrüche erfasst:
txt = '''aaa
bbb'''
res = re.sub('.', '!', txt)
print(res)
Ergebnis des ausgeführten Codes:
'!!!
!!!'
Beispiel
Um diesen Fehler zu beheben, sollte man
das Flag re.DOTALL anwenden:
res = re.sub('.', '!', txt, flags=re.DOTALL)
print(res)
Ergebnis des ausgeführten Codes:
'!!!!!!!'
Beispiel
Im Parameter können auch mehrere
Flags übergeben werden, indem man den Operator +
zwischen ihnen setzt.
Lasst uns zuerst den Buchstaben 'a'
am Ende der Zeile ersetzen:
txt = '''
aaa
AAA
aaa'''
res = re.sub('aaa
, '!', txt)
print(res)
Ergebnis des ausgeführten Codes:
'''
aaa
AAA
!
'''
Beispiel
Setzen wir nun das Flag re.M:
res = re.sub('aaa
, '!', txt, flags=re.M)
print(res)
Ergebnis des ausgeführten Codes:
'''
!
AAA
!
'''
Beispiel
Wenden wir nun zusätzlich das Flag zur Ignorierung der Groß-/Kleinschreibung an:
res = re.sub('aaa
, '!', txt, flags=re.M+re.IGNORECASE)
print(res)
Ergebnis des ausgeführten Codes:
'''
!
!
!
'''