Reguläre Ausdrücke in Python

Haben Sie sich jemals gefragt, was der Schlüssel ist finden Text in einem Dokument oder sicherstellen, dass ein Text entspricht in einem bestimmten Format, beispielsweise einer E-Mail-Adresse, und anderen ähnlichen Vorgängen?

Der Schlüssel für solche Operationen sind reguläre Ausdrücke (Regex). Sehen wir uns einige Definitionen für reguläre Ausdrücke an. In Wikipedia ist Regex wie folgt definiert:

Eine Folge von Zeichen, die ein Suchmuster definieren, hauptsächlich zur Verwendung bei der Musterabgleichung mit Zeichenketten oder der Abgleichung von Zeichenfolgen, d. H. "Suchen und Ersetzen" -ähnlichen Operationen. Das Konzept entstand in den fünfziger Jahren, als der amerikanische Mathematiker Stephen Kleene die Beschreibung einer regulären Sprache formalisierte und gemeinsam mit den Unix-Textverarbeitungsprogrammen ed, einem Editor und grep, einem Filter, verwendet wurde.

Eine weitere schöne Definition von regular-expressions.info ist:

Ein regulärer Ausdruck (Regex oder Regex) ist eine spezielle Zeichenfolge zum Beschreiben eines Suchmusters. Sie können sich reguläre Ausdrücke als Platzhalter für Steroide vorstellen. Sie sind wahrscheinlich mit Platzhalterzeichen wie * .txt vertraut, um alle Textdateien in einem Dateimanager zu finden. Das Äquivalent zum regulären Ausdruck ist. * \. Txt $

Ich weiß, dass das Konzept der regulären Ausdrücke immer noch etwas vage klingt. Schauen wir uns einige Beispiele für Regex an, um das Konzept besser zu verstehen.

Beispiele für reguläre Ausdrücke

In diesem Abschnitt werde ich Ihnen einige Beispiele für Regex zeigen, damit Sie das Konzept besser verstehen können.

Sagen Sie, dass Sie diese Regex hatten:

/ abder /

Das sagt uns einfach, dass wir mit dem Wort übereinstimmen sollen abder nur.

Was ist mit dieser Regex??

/ a [nr] t /

Sie können diese Regex folgendermaßen lesen: Suchen Sie nach einem Textmuster, das den ersten Buchstaben enthält ein und der letzte Buchstabe ist t, und zwischen diesen Buchstaben kommt entweder n oder r. Die passenden Wörter sind also Ameise und Kunst.

Lassen Sie mich an dieser Stelle ein kleines Quiz geben. Wie würden Sie einen regulären Ausdruck schreiben, der mit beginnt ca, und endet mit einem oder allen folgenden Zeichen tbr? Ja, diese Regex kann wie folgt geschrieben werden:

/ ca [tbr] /

Wenn Sie einen Regex sehen, der mit einem Akzent der Umgehung beginnt ^, Dies bedeutet, dass die Zeichenfolge übereinstimmt, die mit der Zeichenfolge beginnt, die später erwähnt wird ^. Wenn Sie also den Regex unten hatten, stimmt er mit der Zeichenfolge überein, die mit beginnt Diese.

/ ^ Das /

Also in der folgenden Zeichenfolge:

Mein Name ist Abder. Dies ist Abder. Dies ist Tom

Basierend auf dem Regex / ^ Das /, Die folgenden Zeichenfolgen werden angepasst:

Das ist Abder Das ist Tom

Was wäre, wenn wir einen String dazu passen wollten endet mit etwas Schnur? In diesem Fall verwenden wir das Dollarzeichen $. Hier ist ein Beispiel:

Abder $

In der obigen Zeichenfolge (den drei Zeilen) würden die folgenden Muster mit dieser Regex abgeglichen:

Mein Name ist Abder Das ist Abder

Nun, was denkst du über diese Regex??

^ [A-Z] [a-z]

Ich weiß, dass es auf den ersten Blick komplex erscheinen mag, aber gehen wir es Stück für Stück durch.

Wir haben schon gesehen, was für einen Akzent aus der Umgehung ^ ist. Es bedeutet Übereinstimmung mit einem String, der mit einem String beginnt. [A-Z] bezieht sich auf die Großbuchstaben. Also, wenn wir diesen Teil der Regex lesen: ^ [A-Z], es sagt uns, dass die Zeichenfolge übereinstimmt, die mit einem Großbuchstaben beginnt. Der letzte Teil, [a-z], bedeutet, dass nach dem Suchen einer Zeichenfolge, die mit einem Großbuchstaben beginnt, Kleinbuchstaben aus dem Alphabet gefolgt werden.

Welche der folgenden Zeichenfolgen wird also mit dieser Regex abgeglichen? Wenn Sie sich nicht sicher sind, können Sie Python verwenden, wie wir im nächsten Abschnitt sehen werden, um Ihre Antwort zu testen.

abder ABDER ABDER ABDER

Reguläre Ausdrücke sind ein sehr breites Thema, und diese Beispiele sollen Ihnen nur ein Gefühl dafür vermitteln, was sie sind und warum wir sie verwenden. 

Eine schöne Referenz, um mehr über reguläre Ausdrücke zu erfahren und mehr Beispiele zu sehen, ist RexEgg.

Reguläre Ausdrücke in Python

Kommen wir nun zum spaßigen Teil. Wir möchten sehen, wie Sie mit einigen der oben genannten regulären Ausdrücke in Python arbeiten. Das Modul, mit dem wir in Python mit regulären Ausdrücken arbeiten, ist das Re Modul.

Im ersten Beispiel ging es darum, das Wort zu finden abder. In Python würden wir dies folgendermaßen tun:

import re text = 'Mein Name ist Abder' match_pattern = re.match (r'Abder ', text) print match_pattern

Wenn Sie das obige Python-Skript ausführen, erhalten Sie die Ausgabe: Keiner!

Das Skript funktioniert gut, aber das Problem ist, wie die Funktion funktioniert Spiel() funktioniert. Wenn wir zum zurückkehren Re Modul-Dokumentation, das ist die Funktion Spiel() tut:

Wenn null oder mehr Zeichen am Anfang der Zeichenfolge mit dem Muster für reguläre Ausdrücke übereinstimmen, geben Sie ein entsprechendes Übereinstimmungsobjekt zurück. Keine zurückgeben, wenn die Zeichenfolge nicht mit dem Muster übereinstimmt. Beachten Sie, dass sich dies von einer Übereinstimmung mit der Länge null unterscheidet.

Aha, davon können wir das sehen Spiel() gibt nur dann ein Ergebnis zurück, wenn bei der Suche eine Übereinstimmung gefunden wurde Anfang der Zeichenfolge.

Wir können stattdessen die Funktion verwenden Suche(), Welches ist, basierend auf der Dokumentation:

Durchsuchen Sie die Zeichenfolge nach dem ersten Ort, an dem das Muster für reguläre Ausdrücke eine Übereinstimmung erzeugt, und geben Sie ein entsprechendes Übereinstimmungsobjekt zurück. Keine zurückgeben, wenn keine Position in der Zeichenfolge mit dem Muster übereinstimmt; Beachten Sie, dass dies anders ist als das Finden einer Übereinstimmung mit der Länge Null an einem bestimmten Punkt in der Zeichenfolge.

Also, wenn wir das obige Skript schreiben, aber mit Suche() anstatt Spiel(), Wir erhalten folgende Ausgabe:

<_sre.SRE_Match object at 0x101cfc988>

Das ist ein übereinstimmendes Objekt wurde zurückgegeben.

Wenn wir das Ergebnis zurückgeben wollen (String-Übereinstimmung), verwenden wir die Gruppe() Funktion. Wenn wir das gesamte Spiel sehen wollen, verwenden wir Gruppe (0). Somit:

drucke match_pattern.group (0)

gibt die Ausgabe zurück: Abder.

Wenn wir den zweiten Regex im vorherigen Abschnitt verwenden, ist dies der Fall / a [nr] t /, Es kann in Python wie folgt geschrieben werden:

import re text = 'Dies ist eine schwarze Ameise' match_pattern = re.search (r'a [nr] t ', text) print match_pattern.group (0)

Die Ausgabe für dieses Skript lautet: Ameise.

Fazit

Der Artikel wird länger, und das Thema reguläre Ausdrücke in Python erfordert sicherlich mehr als einen Artikel, wenn nicht ein Buch für sich. 

Dieser Artikel soll Ihnen jedoch einen schnellen Einstieg und Vertrauen geben, um in die Welt der regulären Ausdrücke in Python einzusteigen. Sie können sich auf die beziehen Re Dokumentation, um mehr über dieses Modul zu erfahren und mehr über das Thema zu erfahren.