Python - Reguläre Ausdrücke
Vorherige SeiteNächste Seite
Ein regulärer Ausdruck ist eine spezielle Zeichenfolge, die Ihnen hilft, andere Zeichenfolgen oder Gruppen von Zeichenfolgen abzugleichen oder zu finden, indem eine spezielle Syntax verwendet wird, die in einem Muster enthalten ist. Reguläre Ausdrücke sind in der UNIX-Welt weit verbreitet.
Das Python-Modul re bietet volle Unterstützung für Perl-ähnliche reguläre Ausdrücke in Python. Das re-Modul löst die Ausnahme re.error aus, wenn beim Kompilieren oder Verwenden eines regulären Ausdrucks ein Fehler auftritt.
Wir würden zwei wichtige Funktionen behandeln, die zur Behandlung regulärer Ausdrücke verwendet werden. Aber eine Kleinigkeit vorweg:Es gibt verschiedene Zeichen, die eine besondere Bedeutung haben, wenn sie in regulären Ausdrücken verwendet werden. Um Verwirrung beim Umgang mit regulären Ausdrücken zu vermeiden, würden wir Raw Strings als r'expression' verwenden .
Das Spiel Funktion
Diese Funktion versucht, RE Muster abzugleichen zu String mit optionalen Flags .
Hier ist die Syntax für diese Funktion −
re.match(pattern, string, flags=0)
Hier ist die Beschreibung der Parameter −
Sr.Nr. | Parameter &Beschreibung |
---|---|
1 | Muster Dies ist der zu vergleichende reguläre Ausdruck. |
2 | Zeichenfolge Dies ist die Zeichenkette, die nach dem Muster am Anfang der Zeichenkette gesucht werden würde. |
3 | Flaggen Sie können verschiedene Flags mit bitweisem ODER (|) angeben. Dies sind Modifikatoren, die in der folgenden Tabelle aufgeführt sind. |
Das re.match Funktion gibt eine Übereinstimmung zurück Objekt bei Erfolg, Keine auf Versagen. Wir verwenden group(num) oder Gruppen() Funktion von Match Objekt, um einen übereinstimmenden Ausdruck zu erhalten.
Sr.No. | Objektmethode und -beschreibung abgleichen |
---|---|
1 | Gruppe(num=0) Diese Methode gibt eine vollständige Übereinstimmung (oder eine bestimmte Untergruppennummer) zurück |
2 | Gruppen() Diese Methode gibt alle übereinstimmenden Untergruppen in einem Tupel zurück (leer, wenn es keine gibt) |
Beispiel
Live-Demo#!/usr/bin/python import re line = "Cats are smarter than dogs" matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I) if matchObj: print "matchObj.group() : ", matchObj.group() print "matchObj.group(1) : ", matchObj.group(1) print "matchObj.group(2) : ", matchObj.group(2) else: print "No match!!"
Wenn der obige Code ausgeführt wird, erzeugt er das folgende Ergebnis −
matchObj.group() : Cats are smarter than dogs matchObj.group(1) : Cats matchObj.group(2) : smarter
Die Suche Funktion
Diese Funktion sucht nach dem ersten Vorkommen von RE Muster innerhalb von Zeichenfolge mit optionalen Flags .
Hier ist die Syntax für diese Funktion −
re.search(pattern, string, flags=0)
Hier ist die Beschreibung der Parameter −
Sr.No. | Parameter &Beschreibung |
---|---|
1 | Muster Dies ist der zu vergleichende reguläre Ausdruck. |
2 | Zeichenfolge Dies ist die Zeichenfolge, die durchsucht werden würde, um mit dem Muster irgendwo in der Zeichenfolge übereinzustimmen. |
3 | Flaggen Sie können verschiedene Flags mit bitweisem ODER (|) angeben. Dies sind Modifikatoren, die in der folgenden Tabelle aufgeführt sind. |
Die Forschung Funktion gibt eine Übereinstimmung zurück Objekt bei Erfolg, keine auf Versagen. Wir verwenden group(num) oder Gruppen() Funktion von Match Objekt, um einen übereinstimmenden Ausdruck zu erhalten.
Sr.Nr. | Match-Objektmethoden und -beschreibung |
---|---|
1 | Gruppe(num=0) Diese Methode gibt eine vollständige Übereinstimmung (oder eine bestimmte Untergruppennummer) zurück |
2 | Gruppen() Diese Methode gibt alle übereinstimmenden Untergruppen in einem Tupel zurück (leer, wenn es keine gibt) |
Beispiel
Live-Demo#!/usr/bin/python import re line = "Cats are smarter than dogs"; searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I) if searchObj: print "searchObj.group() : ", searchObj.group() print "searchObj.group(1) : ", searchObj.group(1) print "searchObj.group(2) : ", searchObj.group(2) else: print "Nothing found!!"
Wenn der obige Code ausgeführt wird, erzeugt er das folgende Ergebnis −
searchObj.group() : Cats are smarter than dogs searchObj.group(1) : Cats searchObj.group(2) : smarter
Matching versus Suche
Python bietet zwei verschiedene primitive Operationen basierend auf regulären Ausdrücken:match sucht nur am Anfang des Strings nach einer Übereinstimmung, während search sucht irgendwo im String nach einer Übereinstimmung (das macht Perl standardmäßig).
Beispiel
Live-Demo#!/usr/bin/python import re line = "Cats are smarter than dogs"; matchObj = re.match( r'dogs', line, re.M|re.I) if matchObj: print "match --> matchObj.group() : ", matchObj.group() else: print "No match!!" searchObj = re.search( r'dogs', line, re.M|re.I) if searchObj: print "search --> searchObj.group() : ", searchObj.group() else: print "Nothing found!!"
Wenn der obige Code ausgeführt wird, erzeugt er das folgende Ergebnis −
No match!! search --> searchObj.group() : dogs
Suchen und Ersetzen
Einer der wichtigsten re Methoden, die reguläre Ausdrücke verwenden, ist sub .
Syntax
re.sub(pattern, repl, string, max=0)
Diese Methode ersetzt alle Vorkommen des RE Musters in Zeichenfolge mit ersetzen , wobei alle Vorkommen ersetzt werden, außer max bereitgestellt. Diese Methode gibt eine modifizierte Zeichenfolge zurück.
Beispiel
Live-Demo#!/usr/bin/python import re phone = "2004-959-559 # This is Phone Number" # Delete Python-style comments num = re.sub(r'#.*$', "", phone) print "Phone Num : ", num # Remove anything other than digits num = re.sub(r'\D', "", phone) print "Phone Num : ", num
Wenn der obige Code ausgeführt wird, erzeugt er das folgende Ergebnis −
Phone Num : 2004-959-559 Phone Num : 2004959559
Modifikatoren für reguläre Ausdrücke:Options-Flags
Reguläre Ausdrucksliterale können einen optionalen Modifikator enthalten, um verschiedene Aspekte des Abgleichs zu steuern. Die Modifikatoren werden als optionales Flag angegeben. Sie können mehrere Modifikatoren mit exklusivem ODER (|) angeben, wie zuvor gezeigt, und können durch einen dieser Modifikatoren −
dargestellt werdenSr.No. | Modifizierer &Beschreibung |
---|---|
1 | re.Ich Führt einen Vergleich ohne Berücksichtigung der Groß-/Kleinschreibung durch. |
2 | re.L Interpretiert Wörter gemäß dem aktuellen Gebietsschema. Diese Interpretation wirkt sich auf die alphabetische Gruppe (\w und \W) sowie auf das Verhalten der Wortgrenzen (\b und \B) aus. |
3 | re.M Sorgt dafür, dass $ mit dem Ende einer Zeile übereinstimmt (nicht nur mit dem Ende des Strings) und mit ^ mit dem Beginn einer beliebigen Zeile übereinstimmt (nicht nur mit dem Beginn des Strings). |
4 | re.S Sorgt dafür, dass ein Punkt (Punkt) mit einem beliebigen Zeichen übereinstimmt, einschließlich eines Zeilenumbruchs. |
5 | re.U Interpretiert Buchstaben gemäß dem Unicode-Zeichensatz. Dieses Flag beeinflusst das Verhalten von \w, \W, \b, \B. |
6 | re.X Erlaubt eine "niedlichere" Syntax für reguläre Ausdrücke. Es ignoriert Leerzeichen (außer innerhalb eines Satzes [] oder wenn es durch einen Backslash maskiert wird) und behandelt nicht maskiertes # als Kommentarmarkierung. |
Muster für reguläre Ausdrücke
Außer Steuerzeichen (+ ? . * ^ $ ( ) [ ] { } | \) , alle Zeichen passen zu sich selbst. Sie können ein Steuerzeichen maskieren, indem Sie ihm einen umgekehrten Schrägstrich voranstellen.
Die folgende Tabelle listet die Syntax für reguläre Ausdrücke auf, die in Python verfügbar ist −
Sr.Nr. | Muster &Beschreibung |
---|---|
1 | ^ Entspricht dem Zeilenanfang. |
2 | $ Entspricht dem Zeilenende. |
3 | . Stimmt mit jedem einzelnen Zeichen außer Newline überein. Die Verwendung der Option m ermöglicht es auch, Zeilenumbrüche zu finden. |
4 | [...] Entspricht jedem einzelnen Zeichen in Klammern. |
5 | [^...] Entspricht jedem einzelnen Zeichen, das nicht in Klammern steht |
6 | re* Entspricht 0 oder mehr Vorkommen des vorhergehenden Ausdrucks. |
7 | wieder+ Entspricht mindestens einem Vorkommen des vorhergehenden Ausdrucks. |
8 | re? Stimmt mit 0 oder 1 Vorkommen des vorhergehenden Ausdrucks überein. |
9 | re{ n} Entspricht genau n Vorkommen des vorhergehenden Ausdrucks. |
10 | re{ n,} Stimmt mit n oder mehr Vorkommen des vorhergehenden Ausdrucks überein. |
11 | re{ n, m} Entspricht mindestens n und höchstens m Vorkommen des vorhergehenden Ausdrucks. |
12 | a| b Entspricht entweder a oder b. |
13 | (wieder) Gruppiert reguläre Ausdrücke und merkt sich übereinstimmenden Text. |
14 | (?imx) Schaltet vorübergehend die i-, m- oder x-Optionen innerhalb eines regulären Ausdrucks ein. Wenn in Klammern angegeben, ist nur dieser Bereich betroffen. |
15 | (?-imx) Schaltet die i-, m- oder x-Optionen innerhalb eines regulären Ausdrucks vorübergehend aus. Wenn in Klammern angegeben, ist nur dieser Bereich betroffen. |
16 | (?:re) Gruppiert reguläre Ausdrücke, ohne übereinstimmenden Text zu speichern. |
17 | (?imx:re) Schaltet vorübergehend die i-, m- oder x-Optionen in Klammern ein. |
18 | (?-imx:re) Schaltet vorübergehend die i-, m- oder x-Optionen in Klammern aus. |
19 | (?#...) Kommentar. |
20 | (?=re) Gibt die Position mithilfe eines Musters an. Hat keinen Bereich. |
21 | (?! wieder) Gibt die Position mit Musternegation an. Hat keinen Bereich. |
22 | (?> wieder) Entspricht einem unabhängigen Muster ohne Backtracking. |
23 | \w Entspricht Wortzeichen. |
24 | \W Entspricht Nichtwortzeichen. |
25 | \s Stimmt mit Leerzeichen überein. Entspricht [\t\n\r\f]. |
26 | \S Stimmt mit Nicht-Leerzeichen überein. |
27 | \d Entspricht Ziffern. Entspricht [0-9]. |
28 | \D Entspricht Nichtziffern. |
29 | \A Entspricht dem Anfang der Zeichenfolge. |
30 | \Z Entspricht dem Ende der Zeichenfolge. Wenn ein Zeilenumbruch vorhanden ist, passt er direkt vor Zeilenumbruch. |
31 | \z Entspricht dem Ende der Zeichenfolge. |
32 | \G Spielt den Punkt ab, an dem das letzte Spiel endete. |
33 | \b Entspricht Wortgrenzen außerhalb von Klammern. Entspricht der Rücktaste (0x08) innerhalb von Klammern. |
34 | \B Stimmt mit Nichtwortgrenzen überein. |
35 | \n, \t usw. Entspricht Zeilenumbrüchen, Wagenrückläufen, Tabulatoren usw. |
36 | \1...\9 Entspricht dem n-ten gruppierten Teilausdruck. |
37 | \10 Stimmt mit dem n-ten gruppierten Unterausdruck überein, wenn er bereits übereinstimmt. Bezieht sich ansonsten auf die oktale Darstellung eines Zeichencodes. |
Beispiele für reguläre Ausdrücke
Buchstäbliche Zeichen
Sr.Nr. | Beispiel &Beschreibung |
---|---|
1 | Python Übereinstimmung mit „python“. |
Zeichenklassen
Sr.Nr. | Beispiel &Beschreibung |
---|---|
1 | [Pp]ython Übereinstimmung mit „Python“ oder „python“ |
2 | reibe[ye] Übereinstimmung mit „ruby“ oder „rube“ |
3 | [aeiou] Entspricht einem beliebigen Kleinbuchstaben |
4 | [0-9] Passen Sie jede Ziffer an; dasselbe wie [0123456789] |
5 | [a-z] Übereinstimmung mit einem ASCII-Kleinbuchstaben |
6 | [A–Z] Entspricht einem beliebigen ASCII-Großbuchstaben |
7 | [a-zA-Z0-9] Übereinstimmung mit einem der oben genannten |
8 | [^aeiou] Übereinstimmung mit irgendetwas anderem als einem kleingeschriebenen Vokal |
9 | [^0-9] Übereinstimmung mit irgendetwas anderem als einer Ziffer |
Sonderzeichenklassen
Sr.Nr. | Beispiel &Beschreibung |
---|---|
1 | . Entspricht jedem Zeichen außer Newline |
2 | \d Übereinstimmung mit einer Ziffer:[0-9] |
3 | \D Übereinstimmung mit einer Nichtziffer:[^0-9] |
4 | \s Übereinstimmung mit einem Leerzeichen:[ \t\r\n\f] |
5 | \S Übereinstimmung mit Nicht-Leerzeichen:[^ \t\r\n\f] |
6 | \w Übereinstimmung mit einem einzelnen Wortzeichen:[A-Za-z0-9_] |
7 | \W Übereinstimmung mit einem Nichtwortzeichen:[^A-Za-z0-9_] |
Wiederholungsfälle
Sr.Nr. | Beispiel &Beschreibung |
---|---|
1 | Rubin? Passen Sie "rub" oder "ruby" an:das y ist optional |
2 | Rubin* Übereinstimmung mit „rub“ plus 0 oder mehr ys |
3 | Rubin+ Übereinstimmung mit „rub“ plus 1 oder mehr ys |
4 | \d{3} Passen Sie genau 3 Ziffern an |
5 | \d{3,} Übereinstimmung mit 3 oder mehr Ziffern |
6 | \d{3,5} Übereinstimmung mit 3, 4 oder 5 Ziffern |
Nicht gierige Wiederholung
Dies entspricht der kleinsten Anzahl von Wiederholungen −
Sr.No. | Beispiel &Beschreibung |
---|---|
1 | <.*>
Gierige Wiederholung:passt auf " |
2 | <.*?>
Nongreedy:passt auf „ |
Gruppierung mit Klammern
Sr.Nr. | Beispiel &Beschreibung |
---|---|
1 | \D\d+ Keine Gruppe:+ wiederholt \d |
2 | (\D\d)+ Gruppiert:+ wiederholt \D\d Paar |
3 | ([Pp]ython(, )?)+ Übereinstimmung mit „Python“, „Python, python, python“ usw. |
Rückverweise
Dies stimmt erneut mit einer zuvor übereinstimmenden Gruppe überein −
Sr.No. | Beispiel &Beschreibung |
---|---|
1 | ([Pp])ython&\1ails Match python&pails oder Python&Pails |
2 | (['"])[^\1]*\1 Zeichenfolge in einfachen oder doppelten Anführungszeichen. \1 stimmt mit dem überein, was die erste Gruppe gefunden hat. \2 stimmt mit dem überein, was die zweite Gruppe gefunden hat, usw. |
Alternativen
Sr.No. | Beispiel &Beschreibung |
---|---|
1 | python|perl Übereinstimmung mit „python“ oder „perl“ |
2 | rub(y|le)) Übereinstimmung mit „ruby“ oder „ruble“ |
3 | Python(!+|\?) "Python" gefolgt von einem oder mehreren ! oder ein ? |
Anker
Hier muss die Übereinstimmungsposition angegeben werden.
Sr.Nr. | Beispiel &Beschreibung |
---|---|
1 | ^Python Übereinstimmung mit „Python“ am Anfang einer Zeichenfolge oder internen Zeile |
2 | Python$ Übereinstimmung mit „Python“ am Ende einer Zeichenfolge oder Zeile |
3 | \APython Übereinstimmung mit „Python“ am Anfang einer Zeichenfolge |
4 | Python\Z Übereinstimmung mit „Python“ am Ende einer Zeichenfolge |
5 | \bPython\b Übereinstimmung mit „Python“ an einer Wortgrenze |
6 | \brub\B \B ist eine Nichtwortgrenze:passt "rub" in "rube" und "ruby", aber nicht alleine |
7 | Python(?=!) Entspricht „Python“, wenn ein Ausrufezeichen folgt. |
8 | Python(?!!) Übereinstimmung mit „Python“, falls kein Ausrufezeichen folgt. |
Spezielle Syntax mit Klammern
Sr.No. | Beispiel &Beschreibung |
---|---|
1 | R(?#Kommentar) Entspricht "R". Alles andere ist ein Kommentar |
2 | R(?i)uby Groß-/Kleinschreibung beim Abgleich von "uby" |
3 | R(?i:uby) Wie oben |
4 | rub(?:y|le)) Nur gruppieren ohne \1 Rückverweis zu erstellen |
Python