logo

Mustervergleich in Python mit Regex

Möglicherweise kennen Sie die Suche nach Text, indem Sie Strg-F drücken und die gesuchten Wörter eingeben. Reguläre Ausdrücke gehen noch einen Schritt weiter: Sie ermöglichen es Ihnen, ein Textmuster anzugeben, nach dem gesucht werden soll. In diesem Artikel werden wir sehen, wie der Mustervergleich in Python mit Regex funktioniert.

Regex in Python

Reguläre Ausdrücke , auch genannt Regex sind Beschreibungen eines Textmusters. Es kann das Vorhandensein oder Fehlen eines Textes erkennen, indem es ihn mit einem bestimmten Muster abgleicht, und kann ein Muster auch in ein oder mehrere Untermuster aufteilen. Zum Beispiel ein D steht in einem regulären Ausdruck für ein Ziffernzeichen – also jede einzelne Zahl zwischen 0 und 9.



Überprüfen Sie Telefonnummern mit Regex in Python

Der folgende reguläre Ausdruck wird in verwendet Python um eine Zeichenfolge aus drei Zahlen, einem Bindestrich, drei weiteren Zahlen, einem weiteren Bindestrich und vier Zahlen zu finden.

Any other string would not match the pattern. ddd-ddd-dddd>

Reguläre Ausdrücke können viel ausgefeilter sein. Wenn Sie beispielsweise nach einem Muster eine 3 in geschweiften Klammern ({3}) hinzufügen, ist das so, als würden Sie sagen: „Treffen Sie dieses Muster dreimal.“ Der etwas kürzere reguläre Ausdruck lautet also wie folgt:



onclick js
d{3}-d{3}-d{4}>

Es entspricht dem richtigen Telefonnummernformat.

Mustervergleich mit regulären Ausdrücken

Ein Regex-Objekt suchen() Die Methode durchsucht die übergebene Zeichenfolge nach Übereinstimmungen mit der Regex. Match-Objekte verfügen über eine group()-Methode, die den tatsächlich übereinstimmenden Text aus der gesuchten Zeichenfolge zurückgibt. Sie können auch sehenRegex-Cheetsheetfür mehr Informationen.

Beispiel: Importieren Sie das Regex-Modul mit import re. Erstellen Sie ein Regex-Objekt mit demre.compile()Funktion. (Denken Sie daran, eine Rohzeichenfolge zu verwenden.) Übergeben Sie die Zeichenfolge, die Sie durchsuchen möchten, an die search()-Methode des Regex-Objekts. Dies gibt ein Match-Objekt zurück. Rufen Sie die Methode group() des Match-Objekts auf, um eine Zeichenfolge des tatsächlich übereinstimmenden Texts zurückzugeben.



Python3




# Python program to illustrate> # Matching regex objects> import> re> > # regex object> phoneNumRegex>=> re.>compile>(r>'ddd-ddd-dddd'>)> mo>=> phoneNumRegex.search(>'My number is 415-555-4242.'>)> print>(>'Phone number found: '> +> mo.group())>

>

>

Ausgabe:

Phone number found: 415-555-4242>

Klammern zum Gruppieren und Erfassen mit Regex

Eine Möglichkeit zum Mustervergleich mit Regex ist die Verwendung von Klammern um die Muster. Schauen wir uns zum besseren Verständnis einige verschiedene Beispiele an.

Passende Objekte

Angenommen, Sie möchten die Ortsvorwahl vom Rest der Telefonnummer trennen. Durch das Hinzufügen von Klammern werden Gruppen im regulären Ausdruck erstellt: (ddd)-(ddd-dddd). Dann können Sie die match-Objektmethode group() verwenden, um den passenden Text aus nur einer Gruppe abzurufen.

Python3




import> re> phoneNumRegex>=> re.>compile>(r>'(ddd)-(ddd-dddd)'>)> mo>=> phoneNumRegex.search(>'My number is 415-555-4242.'>)> print>(mo.group(>1>))> areaCode, number>=> mo.groups()> print>(>'area code:'>, areaCode)> print>(>'number:'>, number)>

>

>

Ausgabe:

415 area code: 415 number: 555-4242>

Rufen Sie alle Gruppen auf einmal ab

Wenn Sie alle Gruppen auf einmal abrufen möchten, verwenden Sie die Methode groups(), – beachten Sie die Pluralform für den Namen.

Python3




import> re> phoneNumRegex>=> re.>compile>(r>'(ddd)-(ddd-dddd)'>)> mo>=> phoneNumRegex.search(>'My number is 415-555-4242.'>)> print>(mo.groups())>

>

>

Ausgabe:

('415', '555-4242')>

Passen Sie eine Klammer an

Klammern haben in regulären Ausdrücken eine besondere Bedeutung, aber was tun Sie, wenn Sie eine Klammer in Ihrem Text finden müssen? Möglicherweise ist bei den Telefonnummern, die Sie vergleichen möchten, die Ortsvorwahl in Klammern angegeben. In diesem Fall müssen Sie die Zeichen ( und ) durch einen Backslash maskieren. Geben Sie Folgendes in die interaktive Shell ein:

So enthüllen Sie versteckte Apps

Python3




import> re> phoneNumRegex>=> re.>compile>(r>'((ddd)) (ddd-dddd)'>)> mo>=> phoneNumRegex.search(>'My phone number is (415) 555-4242.'>)> print>(mo.group(>1>))>

>

>

Ausgabe:

(415)>

Die Escape-Zeichen ( und ) in der an re.compile() übergebenen Rohzeichenfolge stimmen mit den tatsächlichen Klammerzeichen überein.

Reguläre Ausdrücke: Gruppierung und das Pipe-Zeichen

Der | Das Zeichen wird Pipe genannt. Wir können es überall dort verwenden, wo wir einen von vielen Ausdrücken abgleichen möchten.

Beispiel: Der reguläre Ausdruck r’Batman|Tina Fey’ entspricht entweder „Batman“ oder „Tina Fey“. Wenn sowohl Batman als auch Tina Fey in der gesuchten Zeichenfolge vorkommen, wird das erste Vorkommen des passenden Textes als Match-Objekt zurückgegeben.

Python3




# Python program to illustrate> # Matching regex objects> # with multiple Groups with the Pipe> import> re> heroRegex>=> re.>compile> (r>'Batman|Tina Fey'>)> mo1>=> heroRegex.search(>'Batman and Tina Fey.'>)> print>(mo1.group())>

>

>

Ausgabe:

'Batman'>

Geschweifte Klammern in Regex verstehen

Wenn wir eine Gruppe haben, die wir eine bestimmte Anzahl von Malen wiederholen möchten, folgen Sie der Gruppe im regulären Ausdruck mit einer Zahl in geschweiften Klammern.

Beispielsweise stimmt der reguläre Ausdruck (Ha){3} mit der Zeichenfolge „HaHaHa“ überein, nicht jedoch mit „HaHa“, da letztere nur zwei Wiederholungen der Gruppe (Ha) enthält. Statt nur einer Zahl können Sie auch einen Bereich zwischen den geschweiften Klammern angeben. Der reguläre Ausdruck (Ha){3, 5} passt zu „HaHaHa“, „HaHaHaHa“ und „HaHaHaHaHa“. Sie können auch die erste oder zweite Zahl in den geschweiften Klammern weglassen, um das Minimum oder Maximum unbegrenzt zu lassen. (Ha){3, } stimmt mit drei oder mehr Instanzen der (Ha)-Gruppe überein, während (Ha){, 5} mit null bis fünf Instanzen übereinstimmt. Geschweifte Klammern können dabei helfen, Ihre regulären Ausdrücke kürzer zu machen.

Beispiel 1: In diesem Beispiel verwenden wir geschweifte Klammern, um das Vorkommen des gesuchten Musters anzugeben.

Python3




# Python program to illustrate> # Matching Specific Repetitions> # with Curly Brackets> import> re> haRegex>=> re.>compile>(r>'(Ha){3}'>)> mo1>=> haRegex.search(>'HaHaHa'>)> print>(mo1.group())>

>

>

Ausgabe:

HaHaHa>

Beispiel 2: In diesem Beispiel definieren wir das Vorkommen des Musters mithilfe von geschweiften Klammern und suchen dann, ob ein bestimmtes Muster darin vorhanden ist oder nicht.

Python3


in Java eingestellt



# Python program to illustrate> # Matching Specific Repetitions> # with Curly Brackets> import> re> haRegex>=> re.>compile>(r>'(Ha){3}'>)> mo2>=> haRegex.search(>'Ha'>)>=>=> None> print>(mo2)>

>

>

Ausgabe:

True>

Optionaler Operator oder Fragezeichen (?) im regulären Ausdruck

Manchmal gibt es ein Muster, das Sie nur optional abgleichen möchten. Das heißt, der reguläre Ausdruck sollte eine Übereinstimmung finden, unabhängig davon, ob dieser Textabschnitt vorhanden ist oder nicht. Der ? Das Zeichen kennzeichnet die Gruppe, die ihm vorausgeht, als optionalen Teil des Musters.

Beispiel 1: Hier suchen wir nach einem Muster mit dem Muster „Batman“ oder „Batwoman“. Der (wo)? Ein Teil des regulären Ausdrucks bedeutet, dass das Muster wo eine optionale Gruppe ist. Der reguläre Ausdruck stimmt mit Text überein, der keine oder eine Instanz von „wo“ enthält. Aus diesem Grund stimmt der reguläre Ausdruck sowohl mit „Batwoman“ als auch mit „Batman“ überein. Können Sie sich das vorstellen? wie gesagt, Gruppen Entsprechen null oder einer der Gruppen vor diesem Fragezeichen.

Wenn Sie ein tatsächliches Fragezeichen finden müssen, maskieren Sie es mit ?.

Python3




# Python program to illustrate> # optional matching> # with question mark(?)> import> re> batRegex>=> re.>compile>(r>'Bat(wo)?man'>)> mo1>=> batRegex.search(>'The Adventures of Batman'>)> mo2>=> batRegex.search(>'The Adventures of Batwoman'>)> print>(mo1.group())> print>(mo2.group())>

>

>

Ausgabe:

Batman Batwoman>

Keine oder mehr Musterübereinstimmung mit dem Stern

Das * (Stern oder Sternchen genannt) bedeutet Übereinstimmung mit null oder mehr — Die Gruppe, die dem Stern vorangeht, kann im Text beliebig oft vorkommen. Es kann völlig fehlen oder immer wieder auftreten. Wenn Sie ein tatsächliches Sternzeichen finden müssen, stellen Sie dem Stern im regulären Ausdruck einen Backslash, *, voran.

Beispiel 1: In diesem Beispiel werden wir die null Vorkommen eines Musters in der Zeichenfolge abgleichen. Der (wo)*-Teil des regulären Ausdrucks entspricht null Instanzen von wo in der Zeichenfolge.

Python3




# Python program to illustrate> # matching a regular expression> # with asterisk(*)> import> re> batRegex>=> re.>compile>(r>'Bat(wo)*man'>)> mo1>=> batRegex.search(>'The Adventures of Batman'>)> print>(mo1.group())>

>

>

Ausgabe:

Batman>

Beispiel 2: In diesem Beispiel werden wir mindestens ein Vorkommen eines Musters in der Zeichenfolge abgleichen.

Python




#python program to illustrate> #matching a regular expression> #with asterisk(*)> import> re> batRegex>=> re.>compile>(r>'Bat(wo)*man'>)> mo2>=> batRegex.search(>'The Adventures of Batwoman'>)> print>(mo2.group())>

strsep
>

>

Ausgabe:

Batwoman>

Beispiel 3: In diesem Beispiel werden wir mehr als ein Vorkommen eines Musters in der Zeichenfolge abgleichen.

Python




# Python program to illustrate> # matching a regular expression> # with asterisk(*)> import> re> batRegex>=> re.>compile>(r>'Bat(wo)*man'>)> mo3>=> batRegex.search(>'The Adventures of Batwowowowoman'>)> print>(mo3.group())>

>

>

Ausgabe:

Batwowowowoman>

Ein oder mehrere Mustervergleiche mit dem Plus

Während * bedeutet Übereinstimmung mit null oder mehr , das + (oder Plus) bedeutet passen zu einem oder mehreren. Im Gegensatz zum Stern, dessen Gruppe nicht in der übereinstimmenden Zeichenfolge erscheinen muss, muss die Gruppe vor einem Plus mindestens einmal vorkommen. Es ist nicht optional. Wenn Sie ein tatsächliches Pluszeichen finden müssen, stellen Sie dem Pluszeichen einen umgekehrten Schrägstrich voran, um es zu maskieren: +.

Beispiel 1: In diesem Beispiel werden wir mindestens ein Vorkommen eines Musters in der Zeichenfolge abgleichen.

Python3




# Python program to illustrate> # matching a regular expression> # with plus(+)> import> re> batRegex>=> re.>compile>(r>'Bat(wo)+man'>)> mo1>=> batRegex.search(>'The Adventures of Batwoman'>)> print>(mo1.group())>

>

>

Ausgabe:

Batwoman>

Beispiel 2: In diesem Beispiel stimmt der reguläre Ausdruck Bat(wo)+man nicht mit der Zeichenfolge „The Adventures of Batman“ überein, da für das Pluszeichen mindestens ein Wo erforderlich ist.

Offsethöhe

Python




# Python program to illustrate> # matching a regular expression> # with plus(+)> import> re> batRegex>=> re.>compile>(r>'Bat(wo)+man'>)> mo3>=> batRegex.search(>'The Adventures of Batman'>)>=>=> None> print>(mo3)>

>

>

Ausgabe:

True>

Verwandter Artikel Regex-Cheetsheet