Das Anfängerhandbuch für reguläre Ausdrücke mit Python
Wenn Sie ein Programmierer sind, wissen Sie wahrscheinlich bereits, was reguläre Ausdrücke (Regex) sind. Regex-Muster wurden in fast jeder gängigen Programmiersprache implementiert, aber die Leistungsfähigkeit und Vielseitigkeit dieser Muster wird von den meisten Entwicklern nicht erkannt.
In diesem Handbuch geht es um reguläre Ausdrücke und wie Sie sie in der Programmiersprache Python verwenden können.
Was sind reguläre Ausdrücke?
Reguläre Ausdrücke sind Muster, mit denen ein Benutzer Zeichenkombinationen in Textdateien und Zeichenfolgen abgleichen kann. Sie können reguläre Ausdrücke verwenden, um ein bestimmtes Muster in der Ausgabe eines Befehls oder eines Dokuments zu filtern oder zu finden.
Es gibt verschiedene Anwendungsfälle für reguläre Ausdrücke, wobei der bekannteste der Befehl grep unter Linux ist . Andere Anwendungen umfassen das Filtern von Informationen, z. B. das Extrahieren von E-Mail-Adressen und Telefonnummern aus einem Datendump.
Der Hauptgrund, warum viele Entwickler von regulären Ausdrücken abweichen, ist das mangelnde Bewusstsein für die Leistungsfähigkeit des Mustervergleichs. Einige finden sogar reguläre Ausdrücke verwirrend, da in den Mustern viele Zeichen und Sequenzen verwendet werden.
Was auch immer der Grund sein mag, reguläre Ausdrücke sind und bleiben einer der wichtigsten Aspekte der Programmierung, über die jeder Bescheid wissen sollte.
Reguläre Ausdrücke: Übereinstimmende Zeichen und Sequenzen
Regex ist eine ganz neue Sprache für sich. Eine Regex-Engine interpretiert Muster, die aus mehreren Zeichen bestehen, die mit bestimmten Bedeutungen ausgestattet sind. Grundlegende Literale wie alphanumerische Zeichen stimmen überein. Komplexe Zeichen wie $, *, +, {usw. helfen jedoch beim Abgleich höherer Ordnung.
- Sternchen (*): Entspricht dem vorhergehenden Zeichen null oder mehrmals. Die wörtliche Bedeutung des Zeichens wäre "Element n-mal multipliziert". Wenn der reguläre Ausdruck beispielsweise abc * ist , sind die übereinstimmenden Zeichenfolgen ab, abc, abcc, abccc, abcccc usw. Der Ausdruck [bc] * stimmt mit bc, bcbc, bcbc usw. überein.
- Plus (+): Entspricht dem vorhergehenden Zeichen ein- oder mehrmals. Die Funktionsweise des Zeichens + ähnelt der von * , aber das Zeichen + lässt das Muster weg, wenn das Zeichen nicht vorkommt. Zum Beispiel stimmt abc + mit abc, abcc, abccc usw. überein, aber nicht mit ab.
- Fragezeichen (?): Entspricht dem vorhergehenden Zeichen null oder einmal. Zum Beispiel ist das Muster abc? passt nur zu ab und abc.
- Pipe (|): Wird als binärer ODER- Operator verwendet. Entspricht einem der Zeichen vor und nach der Pipe. Zum Beispiel entspricht a | b entweder a oder b.
- Punkt (.): Entspricht einem Zeichen, dessen Identität unbekannt ist. Zum Beispiel stimmt ac mit aac, abc, acc, a2c usw. überein.
- Karotte (^): Entspricht dem ersten Zeichen im Muster. Zum Beispiel stimmt ^ Ra mit Wörtern überein, die mit Ra beginnen, wie z. B. Rabbit, Raccoon und Random.
- Dollar ($): Entspricht dem letzten Zeichen im Muster. Zum Beispiel stimmt ein $ mit Wörtern überein, die mit einem wie Van, Dan und Plan enden.
- Bindestrich (-): Dient zum Definieren eines Zeichenbereichs. Beispielsweise stimmt [0-9] mit allen einstelligen numerischen Zeichen überein.
Spezielle Sequenzen, die in Mustern regulärer Ausdrücke verwendet werden, sind:
- A: Gibt eine Übereinstimmung zurück, wenn die nachfolgenden Zeichen am Anfang der Zeichenfolge vorhanden sind. Zum Beispiel stimmt AThe mit Wörtern überein, die mit The beginnen, wie The, Them, They usw.
- b: Gibt eine Übereinstimmung zurück, wenn das Zeichen entweder am Anfang oder am Ende eines Wortes gefunden wird. Zum Beispiel stimmen bmad und mad b mit Wörtern wie made und nomad überein.
- B: Gibt eine Übereinstimmung zurück, wenn das Zeichen nicht am Anfang oder Ende eines Wortes gefunden wird.
- d: Entspricht den in der Zeichenfolge enthaltenen numerischen Zeichen. Zum Beispiel stimmt / d * mit Zahlen wie 1, 12, 1232 usw. überein.
- D: Entspricht nicht numerischen Zeichen in der Zeichenfolge. / D entspricht a, b, c, f usw.
- s: Entspricht einem Leerzeichen im Text.
- S: Entspricht einem Nicht-Leerzeichen im Text.
- w: Gibt eine Übereinstimmung zurück, wenn die Zeichenfolge alphanumerische Zeichen einschließlich Unterstrichen enthält. Zum Beispiel stimmt w mit a, b, c, d, 1, 2, 3 usw. überein.
- W: Gibt eine Übereinstimmung zurück, wenn die Zeichenfolge keine alphanumerischen Zeichen oder Unterstriche enthält.
- Z: Entspricht den Zeichen am Ende einer Zeichenfolge. Zum Beispiel stimmt end Z mit Wörtern überein, die mit end enden, wie biegen, flicken, tendieren usw.
Python-Methoden für reguläre Ausdrücke
In Python stellt die Re – Bibliothek alle notwendigen Funktionen und Dienstprogramme erforderlich regex in Ihre Programme zu implementieren. Sie müssen die Bibliothek nicht mit pip herunterladen, da sie mit dem Python-Interpreter vorinstalliert ist.
Um die Wieder Bibliothek in Python zu importieren, fügen Sie den folgenden Code in Ihr Skript ein :
import re
Beachten Sie, dass wir beim Übergeben regulärer Ausdrücke in Python unformatierte Zeichenfolgen verwenden, da diese Sonderzeichen wie n und t nicht unterschiedlich interpretieren.
Spiel()
Die Methode re.match () in Python gibt ein Regex-Objekt zurück, wenn das Programm am Anfang der angegebenen Zeichenfolge eine Übereinstimmung findet. Diese Funktion akzeptiert zwei grundlegende Argumente:
re.match(pattern, string)
… wobei Muster der reguläre Ausdruck und Zeichenfolge der zu durchsuchende Text ist.
Schauen Sie sich das Code-Snippet unten an.
import re
match = re.match(r'Word', "This sentence contains a Word")
print(match)
Das r- Zeichen vor der Zeichenfolge steht für rohe Zeichenfolge.
Ausgabe:
None
Der oben genannte Code gibt None zurück, da Word am Anfang der Zeichenfolge nicht vorhanden war.
Wenn eine Übereinstimmung gefunden wird, können Sie die Übereinstimmung mit der group () -Methode drucken, die zum Regex-Objekt gehört.
import re
match = re.match(r'Word', "Word is hard to read")
print(match.group(0))
Ausgabe:
Word
Suche()
Die Methode re.search () verwendet ähnliche Argumente wie re.match (). Während match () nur Übereinstimmungen zurückgibt, die am Anfang der Zeichenfolge vorhanden sind, gibt search () Übereinstimmungen zurück, die an einem beliebigen Index in der Zeichenfolge gefunden wurden.
import re
match = re.search(r'Word', "This sentence contains a Word. Word is hard to read.")
print(match.group(0))
Beachten Sie, dass die Methoden match () und search () nur eine Musterübereinstimmung zurückgeben. Im oben genannten Code wird Word zweimal angezeigt. Die Funktion search () stimmt jedoch nur mit dem ersten Vorkommen des Wortes überein.
Word
Finde alle()
Wie Sie bereits erraten können, gibt die findall () -Methode jede mögliche Übereinstimmung in der Zeichenfolge zurück.
import re
match = re.search(r'Word', "This sentence contains a Word. Word is hard to read.")
for elem in match:
print(elem)
Anstatt ein Regex-Objekt zurückzugeben, gibt die Funktion findall () eine Liste aller Übereinstimmungen zurück. Sie können die Liste mit einer for-Schleife in Python durchlaufen.
Teilt()
Wenn Sie eine Zeichenfolge unter Verwendung eines Musters als Trennzeichen in Unterzeichenfolgen aufteilen möchten, benötigen Sie die Funktion split () .
import re
split = re.split(r'and', "This word and that and this are different.")
print(split)
Ausgabe:
['This word", "that", "this are different."]
Sub ()
Die sub () -Methode ermöglicht es einem Benutzer, ein bestimmtes Wort anstelle eines Musters zu ersetzen. Es braucht die folgenden Argumente.
re.sub(pattern, replacement, string)
Betrachten Sie dieses Code-Snippet:
import re
result = re.sub(r'and', 'or', "Dave and Harry must be punished.")
print(result)
Ausgabe:
Dave or Harry must be punished.
Kompilieren()
Die re.compile () -Methode in der Re – Bibliothek ermöglicht es einem Benutzer eine kompilierte Version des regulären Ausdrucksmuster in dem Speicher zu speichern. Mithilfe des kompilierten Objekts kann der Benutzer dann den angegebenen Textauszug schnell nach übereinstimmenden Mustern filtern.
import re
pattern = re.compile('Python')
match = pattern.findall("Python is a great language for writing scripts. Python is easy to learn.")
print(match)
Diese Funktion wird hauptsächlich zum Speichern von Mustern verwendet, die ressourcenintensiv sind und viel Zeit zum Ausführen benötigen. Das vorherige Kompilieren und Speichern des Musters als Objekt löst dieses Problem.
Nutzen Sie die Kraft von Regex mit Python
Wenn Sie mit Textdateien und Ausgaben arbeiten, ist Regex ein großartiges Werkzeug, das Ihnen zur Verfügung steht. Sie können schnell Code schreiben, um bestimmte Muster im Dokument zu filtern oder zu ersetzen.
Das Speichern aller Zeichen und übereinstimmenden Sequenzen kann schwierig sein, wenn Sie gerade erst mit Regex beginnen. Um bei regulären Ausdrücken besser zu werden, hilft es Ihnen auf lange Sicht definitiv, ab und zu auf eine Liste von Zeichen, Methoden und Sequenzen zu verweisen.