Wenn Sie beispielsweise Handler für URL schreiben (und Gott hilft Ihnen, wenn Sie einen von Grund auf neu schreiben), möchten Sie oft das gleiche Ergebnis zeigen, unabhängig vom Nachverfolgung '/' in der URL. E.g https: // Beispiel.Com/Benutzer/Einstellungen/und https: // Beispiel.COM/Benutzer-/Einstellungen sollten trotz des nachverfolgenden '/' auf dieselbe Seite hinweisen.
Sie können jedoch nicht alle Vorwärts -Schrägstriche ignorieren, wie:
Sie finden also eine Regel wie: „Ignorieren.Und wenn Sie möchten, können Sie diese Regel mit einer Reihe von IF-ELSE-Anweisungen codieren. Aber das wird ziemlich schnell umständlich. Sie können eine Funktion schreiben, die mit CleanUrl () mit der Aufschrift Sie diese für Sie zusammenfassen kann. Aber das Universum wird bald mehr Curveball auf Sie werfen. Sie werden bald Funktionen für CleanHeaders (), Processlog () usw. schreiben. Oder Sie können einen regulären Ausdruck verwenden, wenn eine Art von Musteranpassung erforderlich ist.
Bevor wir uns auf die Details der regulären Ausdrücke einlassen, ist es erwähnenswert, das Modell zu erwähnen, das die meisten Systeme für Textströme haben. Hier ist eine kurze (unvollständige) Zusammenfassung davon:
Aus dem Einfachheit halber möchte ich, dass Sie sich vorstellen, dass eine Datei aus Zeilen besteht, die mit einem neuen Zeilenzeichen enden. Wir unterteilen diese Datei in einzelne Zeilen (oder Zeichenfolgen), die jeweils entweder mit einer neuen Zeile oder einem normalen Zeichen enden (für die letzte Zeile).
Regexs und String
Ein Regex hat nichts Besonderes mit Dateien zu tun. Stellen Sie sich vor, es als schwarze Box, die eine beliebige Zeichenfolge einer (endlichen) Länge als Eingabe annehmen kann und sobald es das Ende dieser Zeichenfolge erreicht, kann sie entweder:
Trotz seiner schwarzen Box-Y-Natur werde ich dieser Machinär ein paar weitere Einschränkungen verleihen. Ein Regex liest eine Zeichenfolge der Reihe nach, von links nach rechts, und es liest nach dem anderen nur einen Charakter. Also eine Zeichenfolge "LinuxHint" mit gelesen als:
'L "i" n "u" x "h" i "n" t' [von links nach rechts]
Fangen wir einfach an
Die simpistischste Art von Regex wäre es, nach einer Zeichenfolge 'C' zu suchen und sie abzustimmen. Der reguläre Ausdruck dafür ist nur 'C'. Ziemlich trivial. Der Weg, dies in Python zu tun Betreff Modul für reguläre Ausdrücke.
>>> Import Re
Wir verwenden dann die Funktion RE.suchen(Muster, Zeichenfolge) Wo Muster ist unser regulärer Ausdruck und Saite In der Eingangszeichenfolge, in der wir nach dem Muster suchen.
>>> re.Suche ('C', 'Dieser Satz enthält ein absichtliches C'))Die Funktion nimmt das Muster 'C' auf, sucht es in der Eingangszeichenfolge und druckt den Ort (Spannweite) wo das besagte Muster gefunden wird. Dieser Teil der Zeichenfolge, dieses Substring, entspricht unserem regulären Ausdruck. Wenn es keine solche Übereinstimmungsausgabe gäbe, wäre eine Ausgabe a Keiner Objekt.
In ähnlicher Weise können Sie wie folgt nach dem Muster "regulärer Ausdruck" suchen:
>>> re.Suche („regulärer Ausdruck“, „Wir können reguläre Ausdrücke zum Suchen von Mustern verwenden.”))Betreff.search (), re.Match () und Re.gesamtes Spiel()
Zu den drei nützlichen Funktionen aus dem RE -Modul gehören:
Betreff.suchen(Muster, Zeichenfolge)
Dies kehrt das Substring zurück, das dem Muster entspricht, wie wir oben gesehen haben. Wenn kein Übereinstimmung gefunden wird, dann wird dann gefunden Keiner ist zurück gekommen. Wenn mehrere Substrings einem bestimmten Muster entsprechen, wird nur das erste Ereignis gemeldet.
Betreff.passen(Muster, Zeichenfolge)
Diese Funktion versucht, das angegebene Muster vom Anfang der Zeichenfolge abzustimmen. Wenn es irgendwo auf halbem Weg eine Pause begegnet Keiner.
Zum Beispiel,
>>> re.Match ("Joh", "John Doe")Wo wie die Zeichenfolge „Mein Name ist John Doe“ ist kein Match und daher Keiner ist zurück gekommen.
>>> drucken (RE.Match ("Joh", "Mein Name ist John Doe"))Betreff.gesamtes Spiel(Muster, Zeichenfolge)
Dies ist strenger als die oben genannten und versucht, eine genaue Übereinstimmung des Musters in der Zeichenfolge zu finden, sonst standardmäßig Keiner.
>>> drucken (RE.fullmatch ("joh", "joh"))Ich werde nur die verwenden Betreff.suchen() Funktion im Rest dieses Artikels. Wann immer, ich sage, der Regex akzeptiert diese Zeichenfolge, bedeutet dies, dass Athe Betreff.suchen() Die Funktion hat in der Eingabezeichenfolge ein übereinstimmendes Substring gefunden und diese anstelle von zurückgegeben KeinerObjekt.
Spezielle Charaktere
Regelmäßige Ausdrücke wie 'John' und 'C' sind nicht sehr nützlich. Wir brauchen Sonderzeichen, die im Kontext regulärer Ausdrücke ein spezifischer Mittelwert sind. Hier sind einige Beispiele:
Es gibt noch viel mehr zu decken, aber ich würde empfehlen, das Lernen zu lernen, anstatt Ihr Gehirn mit vielen obskuren Symbolen und Kantenfällen zu überladen. Im Zweifelsfall sind die Python -Dokumente eine große Hilfe und jetzt wissen Sie genug, um den Dokumenten leicht zu folgen.
Wenn Sie eine visuelle Interpretation Ihres Regex sehen möchten, können Sie Debuggex besuchen. Diese Site generiert in Echtzeit eine Ansicht Ihres Regex.
Um mehr über den theoretischen Aspekt der regulären Ausdrücke zu erfahren, möchten Sie sich vielleicht die ersten Kapitel der Einführung in die Theorie der Berechnung von Michael Sipser ansehen. Es ist sehr leicht zu befolgen und zeigt die Bedeutung regulärer Ausdrücke als Kernkonzept der Berechnung selbst!