Python reguläre Ausdrücke mit Beispielen

Python reguläre Ausdrücke mit Beispielen

Ein regulärer Ausdruck (oft nach „Regex“ abgekürzt) ist eine Technik und ein Textmuster, das definiert, wie man eine bestimmte Zeichenfolge suchen oder ändern möchte. Regelmäßige Ausdrücke werden üblicherweise in Bash -Shell -Skripten und in Python -Code sowie in verschiedenen anderen Programmiersprachen verwendet.

In diesem Tutorial lernen Sie:

  • So beginnen Sie mit regulären Ausdrücken auf Python
  • So importieren Sie das Regex -Python -Modul
  • Wie man Streicher und Zeichen mit Regex -Notation übereinstimmt
  • So verwenden Sie die häufigsten Python Regex -Notationen
Python reguläre Ausdrücke mit Beispielen

Softwareanforderungen und Konventionen verwendet

Softwareanforderungen und Linux -Befehlszeilenkonventionen
Kategorie Anforderungen, Konventionen oder Softwareversion verwendet
System Jedes GNU/Linux -Betriebssystem
Software Python 2, Python 3
Andere Privilegierter Zugriff auf Ihr Linux -System als Root oder über die sudo Befehl.
Konventionen # - erfordert, dass gegebene Linux -Befehle mit Root -Berechtigungen entweder direkt als Stammbenutzer oder mit Verwendung von ausgeführt werden können sudo Befehl
$ - Erfordert, dass die angegebenen Linux-Befehle als regelmäßiger nicht privilegierter Benutzer ausgeführt werden können

Beispiele für reguläre Ausdrücke Python

In Python möchte man die importieren Betreff Modul, um die Verwendung regulärer Ausdrücke zu ermöglichen.

Beispiel 1 Beginnen wir mit einem einfachen Beispiel:

$ python3 python 3.8.2 (Standard, 27. April 2020, 15:53:34) [GCC 9.3.0] auf Linux -Typ "Hilfe", "Copyright", "Credits" oder "Lizenz" für weitere Informationen. >>> print ('Hello World') Hallo Welt >>> Import RE >>> print (RE.Match ('^.','Hallo Welt')) 
Kopieren

Hier haben wir zuerst gedruckt Hallo Welt Zeile 5to demonstrieren Sie ein einfaches Print -Setup. Wir haben dann das Regex -Modul importiert Betreff Zeile 7nable uns, um die zu verwenden .passen reguläre Ausdruckslinie 8Matching -Funktion dieser Bibliothek.

Die Syntax der .passen Funktion ist (Muster, String), bei dem Muster als regulärer Ausdruck definiert wurde ^.'Und wir haben das gleiche benutzt Hallo Welt Zeichenfolge als unsere Eingangszeichenfolge.

Wie Sie sehen können, wurde im Brief ein Match gefunden H. Der Grund, warum diese Übereinstimmung gefunden wurde, ist das Muster des regulären Ausdrucks, nämlich; ^ steht für Beginn der String Und . steht für Passen Sie einen einzigen Charakter an (außer Newline).

Daher, H wurde gefunden, da dieser Brief direkt nach dem „Beginn der Zeichenfolge“ erfolgt und als „ein einzelner Charakter beschrieben wird, H in diesem Fall".

WUSSTEN SIE?
Diese speziellen Konnotationen sind identisch mit regulären Ausdrücken beim Bash-Skripting und anderen von regex bewussten Anwendungen, die alle einen oder weniger einheitlichen Regex-Standard verwenden, obwohl es Unterschiede zwischen Sprachen und sogar spezifischen Implementierungen gibt, wenn Sie sich ein wenig mit regulären Ausdrücken befassen weiter.

Beispiel 2

>>> drucken (RE.Match ('… W', 'Hallo Welt')) 
Kopieren

Hier verwenden wir . zu einem einzigen Charakter (außer Newline) zu entsprechen, und wir tun dies 6 Mal, bevor wir den buchstäblichen Charakter entsprechen W.

Wie du sehen kannst Hallo w (7 Zeichen) wurde abgestimmt. Interessanterweise sollte diese Show als Span (0,7), die nicht als 0-7 (8 Zeichen) gelesen werden sollte, sondern als „Start bei 0“ „+7 Zeichen“, wie es auch aus den anderen Beispielen in diesem Blick sehen kann Artikel.

Beispiel 3 Nehmen wir ein weiteres, etwas komplexeres Beispiel:

>>> drucken (RE.Match ('^H [Elo]+', 'Hallo Welt')) 
Kopieren

Die Syntax in diesem Fall lautet:

  • ^: Wie oben beschrieben, kann auch als "Dies muss der Beginn der Zeichenfolge sein" gelesen werden
  • H: muss passen H Genau an diesem Ort (der sich direkt nach/am Start der Zeichenfolge befindet)
  • [Elo]+: Match entweder e,l oder Ö (das von 'entweder' definiert von [' Und ']) Und + bedeutet "Eins oder mehrere davon"

Daher, Hallo wurde abgestimmt als H war in der Tat zu Beginn der Saite und e Und Ö Und l wurden ein oder mehrmals (in beliebiger Reihenfolge) übereinstimmen.

Beispiel 3Ready für einen super komplexen?

>>> drucken (RE.findall ('^[er]+ll [o \ t]+wo [rl].+$ ',' Hallo Welt ')) [' Hallo Welt '];
Kopieren

Hier haben wir eine weitere Funktion des RE -Moduls verwendet, nämlich finde alle Dies ergibt sofort die gefundene Zeichenfolge und verwendet die gleiche (Muster, String) -Syntax.

Warum tat es Hallo Welt in vollem Umfang übereinstimmen? Lassen Sie es uns Schritt für Schritt aufschlüsseln:

  • ^: Start der Zeichenfolge
  • [Er]+: Streichhölzer H Und e 1 oder mehrmals und so Er Ist abgestimmt
  • ll: wörtliches Matching von ll genau an dieser Stelle und damit tatsächlich ll ist angepasst, wie es direkt danach kam Er
  • [o \ t]+: Match entweder " (Raum) oder Ö, oder \T (eine Registerkarte) und das 1 oder mehrmals und so Ö (o Space) übereinstimmt. Wenn wir einen Registerkarte anstelle eines Raums verwendet hätten, würde dieser Regex immer noch funktionieren!
  • Wo: Wörtliches Match von Wo
  • [RL]: Match entweder R oder l. Sorgfältig beobachten; nur R ist hier abgestimmt! Es gibt kein + Hinter ] Also auch nur ein einzelner Charakter R oder l wird in dieser Position abgestimmt. Warum war es also RLD immer noch übereinstimmt? Die Antwort ist im nächsten Qualifikation;
  • .+: übereinstimmen jeden Charakter (angegeben von .) ein oder mehrmals also, so l Und D werden beide übereinstimmen und unsere Saite ist vollständig
  • $: Ähnlich zu ^, Dieser Zeichen bedeutet "Ende der String".

Mit anderen Worten, hätten wir dies zu Beginn oder woanders in der Mitte platziert, hätte der Regex nicht übereinstimmend.

Als Beispiel:

>>> drucken (RE.findall ('^Hallo $', 'Hallo Welt') [] >>> print (RE.findall ('^Hallo $', 'Hallo')) [] >>> print (RE.findall ('^Hallo $', 'Hallo')) ['Hallo'] >>> print (RE.findall ('^Hallo', 'Hallo Welt')) ['Hallo']
Kopieren

Hier wird für die ersten beiden Druck keine Ausgabe zurückgegeben, da wir versuchen, eine Zeichenfolge zu erreichen, die als "start_of_string" gelesen werden kann-Hallo-"End_of_string", wie von Bedeutung von ^Hallo $, gegen Hallo Welt was nicht übereinstimmt.

Im dritten Beispiel die ^Hallo $ Streichhölzer Hallo Da es keine zusätzlichen Zeichen in der gibt Hallo Zeichenfolge, die dazu führen würde, dass dieser Regex die Übereinstimmung fehlschlägt. Schließlich zeigt das letzte Beispiel eine teilweise Übereinstimmung, ohne dass das „end_of_string“ ($) erforderlich ist.

Sehen? Sie werden bereits ein regulärer Ausdrucksexperte! Regelmäßige Ausdrücke können Spaß machen und sehr mächtig sind!

Beispiel 4
Es gibt verschiedene andere Funktionen in der Betreff Python -Modul wie Betreff.Sub, Betreff.Teilt, Betreff.sub, Betreff.suchen, jeweils mit ihren anwendbaren Anwendungsfalldomänen. Schauen wir uns RE an.Sub Weiter:

>>> drucken (RE.sub ('^Hallo', 'Tschüss', 'Hallo Welt')) Tschüss Welt
Kopieren

Die String -Substitution ist eine der leistungsstärksten Anwendungen regelmäßiger Ausdrücke in Python und anderen Codierungssprachen. In diesem Beispiel haben wir nach gesucht ^Hallo und ersetzte es durch Tschüss in der Zeichenfolge Hallo Welt. Können Sie sehen, wie sehr dies sehr praktisch wäre, um alle Arten von Variablen und Textzeichenfolgen und sogar in ganzen flachen Textdateien zu verarbeiten??



Beispiel 5
Schauen wir uns einige komplexe Beispiele an, indem wir eine fortschrittlichere Regex -Syntax verwenden:

>>> drucken (RE.sub ('[0-9]+', '_', 'Hallo Welt 123') Hallo Welt _
Kopieren
  • [0-9]+: Jeder numerische Charakter von 0 Zu 9, ein oder mehrmals.

Kannst du sehen, wie die 123 wurde durch eine einzige ersetzt _ ?

Beispiel 6

>>> drucken (RE.sub ('(' (?i) [o-r]+',' _ ',' Hallo Welt 123 ')) Hell_ W_LD 123
Kopieren
  • (?i) [O-R]+: Passen Sie einen oder mehrere an Ö Zu R oder - dank der optionalen ich Flagge - Ö Zu R
  • (?ich): voreingestellter Fall-unempfindlich ich Flagge für dieses Muster
>>> drucken (RE.sub ('[1] 2', '_', 'Hello World 111') Hello World _1
Kopieren
  • [1] 2: Passen Sie den Charakter an 1 genau zweimal

Beispiel 7

>>> drucken (RE.Sub ('(Welt)', '\ g \ g', 'Hallo Welt 123') Hello Worldworld 123
Kopieren
  • (Welt): Passen Sie den wörtlichen Text "Welt" an und machen Sie es zu einer Gruppe, die dann im Substitution verwendet werden kann
  • \ g \ g: Der \G Gibt die erste Gruppe an, die übereinstimmte, ich.e. der Text Welt aus dem entnommen Hallo Welt 123 String, und dies wird zweimal wiederholt, was zu dem führt Weltwelt Ausgang. /li>

Beispiel 8

Um dies klarer zu machen, betrachten Sie die folgenden zwei Beispiele:

>>> drucken (RE.sub ('(o)', '\ g \ g \ g', 'Hallo Welt 123') Hellooo Wooorld 123
Kopieren

In diesem ersten Beispiel stimmen wir einfach überein Ö und platzieren Sie es in eine Gruppe und wiederholen Sie diese Gruppe dreimal in der Out.

Beachten Sie, dass wenn wir uns nicht auf Gruppe 1 beziehen (die erste übereinstimmende Gruppe, Ref zweiter Beispiel), es einfach keine Ausgabe geben würde und das Ergebnis wäre:

>>> drucken (RE.sub ('(o)', ',' Hallo Welt 123 ') Hölle Wrld 123
Kopieren

Betrachten Sie für das zweite Beispiel:

>>> drucken (RE.sub ('(o).*(r) ',' \ g \ g ',' Hallo Welt 123 ') Hellorld 123
Kopieren

Hier haben wir zwei Gruppen, das erste Wesen Ö (Wo immer eine solche Gruppe übereinstimmt, und es gibt eindeutig mehrere, wie im ersten Beispiel zu sehen ist) und das zweite Wesen R. Zusätzlich verwenden wir .* Dies bedeutet „jedes Zeichen, eine beliebige Anzahl von Male“ - ein oft verwendeter regulärer Ausdruck.

Also in diesem Beispiel o Wor ist übereinstimmt von (Ö).*(r) '(' o Zuerst, dann jeder Charakter bis zum letzten R ist erreicht. "The Last" Begriff ist sehr importiert und ein leicht zu Fehler/GOTCHA, insbesondere für neue reguläre Ausdrückebenutzer. Betrachten Sie als Seitenbeispiel:

>>> drucken (RE.sub ('e.*o ',' _ ',' Hallo Welt 123 ') H_RLD 123
Kopieren

Kannst du sehen, wie der letzte Ö wurde abgestimmt?

Rückkehr zu unserem Beispiel:

>>> drucken (RE.sub ('(o).*(r) ',' \ g \ g ',' Hallo Welt 123 ') Hellorld 123
Kopieren

Wir können das sehen o Wor wurde durch ein Match von Gruppe 1 ersetzt, gefolgt von einem Match von Gruppe 2, was zu: o Wor ersetzt durch oder und so ist die Ausgabe Hellorld 123.



Abschluss

Schauen wir uns einige der häufigsten regulären Ausdrücke in Python an, die mit einigen leichten Implementierungen derselben übereinstimmen:

Liste der häufigsten Python -Expressionsnotationen Python
Regex -Notation Beschreibung
. Jeder Charakter außer Newline
[A-C] Ein Zeichen des ausgewählten Bereichs, in diesem Fall a, b, c
[A-Z] Ein Zeichen des ausgewählten Bereichs, in diesem Fall A-Z
[0-9AF-Z] Ein Zeichen des ausgewählten Bereichs in diesem Fall 0-9, A und F-Z
[^A-za-z] Ein Charakter außerhalb des ausgewählten Bereichs, in diesem Fall beispielsweise '1', würde sich qualifizieren
* Eine beliebige Anzahl von Übereinstimmungen (0 oder mehr)
+ 1 oder mehr Übereinstimmungen
? 0 oder 1 Übereinstimmung
3 Genau 3 Übereinstimmungen
() Erfassungsgruppe. Wenn dies zum ersten Mal verwendet wird, ist die Gruppennummer 1 usw.
\G Verwenden Sie (einfügen) der Capture Match-Gruppe, qualifiziert nach der Nummer (1-x) der Gruppe
\G Spezielle Gruppe 0 fügt die gesamte übereinstimmende Zeichenfolge ein
^ Beginn der String
$ Ende der String
\D Eine Ziffer
\D Ein nicht digitaler
\S Eine Weißespace
\S Ein Nicht-Whitespace
(?ich) Das Präfix des Fallflags ignorieren, wie oben gezeigt
a | d Ein Zeichen aus beiden (eine Alternative zur Verwendung []), 'a' oder 'D'
\ Entkommt Sonderfiguren
\B Rückenraumcharakter
\N Newline -Charakter
\R Wagenrücklaufcharakter
\T Tab -Zeichen

Interessant? Sobald Sie in jeder Sprache reguläre Ausdrücke verwenden, werden Sie bald feststellen, dass Sie sie überall verwenden - in anderen Codierungssprachen, in Ihrem bevorzugten Regex -Award -Texteditor, in der Befehlszeile (siehe 'SED' für Linux -Benutzer). usw.

Sie werden wahrscheinlich auch feststellen, dass Sie sie mehr Ad-hoc verwenden, ich.e. Nicht nur in der Codierung. Es ist von Natur aus leistungsfähig, alle Arten von Befehlszeilenausgaben zu steuern, z.

Genießen Sie Ihren Lernfortschritt und veröffentlichen Sie unten einige Ihrer mächtigsten Beispiele für reguläre Ausdrucks!



Verwandte Linux -Tutorials:

  • Advanced Bash Regex mit Beispielen
  • Bash Regexps für Anfänger mit Beispielen
  • Mastering -Bash -Skriptschleifen beherrschen
  • Eine Einführung in Linux -Automatisierung, Tools und Techniken
  • Dinge zu installieren auf Ubuntu 20.04
  • Verschachtelte Schleifen in Bash -Skripten
  • Big Data Manipulation zum Spaß und Gewinn Teil 3
  • Umgang mit Benutzereingaben in Bash -Skripten
  • Erstellen Sie Umleitungs- und Umschreiben von Regeln in .Htaccess auf Apache…
  • Mint 20: Besser als Ubuntu und Microsoft Windows?