Python reguläre Ausdrücke mit Beispielen
- 3438
- 74
- Janin Pletsch
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
Softwareanforderungen und Konventionen verwendet
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".
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
Unde
1 oder mehrmals und soEr
Ist abgestimmt - ll: wörtliches Matching von
ll
genau an dieser Stelle und damit tatsächlichll
ist angepasst, wie es direkt danach kamEr
- [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
oderl
. Sorgfältig beobachten; nurR
ist hier abgestimmt! Es gibt kein+
Hinter]
Also auch nur ein einzelner CharakterR
oderl
wird in dieser Position abgestimmt. Warum war es alsoRLD
immer noch übereinstimmt? Die Antwort ist im nächsten Qualifikation; - .+: übereinstimmen jeden Charakter (angegeben von
.
) ein oder mehrmals also, sol
UndD
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
Zu9
, 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
Ö
ZuR
oder - dank der optionalenich
Flagge -Ö
ZuR
- (?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 TextWelt
aus dem entnommenHallo Welt 123
String, und dies wird zweimal wiederholt, was zu dem führtWeltwelt
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:
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?
- « So installieren Sie Codecs & Extras von Drittanbietern unter Manjaro Linux
- So installieren Sie ein Paket von AUR auf Manjaro Linux »