Wie nutze ich Python Regex?
Das ist der Regex-Guide mit der Anwendung in Python.
Regex ist ein mächtiges Tool, mit dem Du viele neue Möglichkeiten haben wirst.
Regex für Python erklärt
Regex ist ein Kunstwort. Das Wort setzt sich aus den Wörtern „Regular Expression“ zusammen (kurz Regex). Ins Deutsche übersetzt, bedeutet Regex „regulärer Ausdruck“.
Ein regulärer Ausdruck beschreibt eine Menge an Zeichenketten.
Eine Zeichenkette (Wörter) stellt eine Reihung von Symbolen (Buchstaben, Ziffern, Sonderzeichen) dar.
Standardmäßig gehört zu jeder Python-Installation die Bibliothek re, die mit den regulären Ausdrücken arbeiten kann.
Beispiele für reguläre Ausdrücke
[0-9][0-9]\a*
Dieser reguläre Ausdruck beschreibt alle Worte, die mit den Zahlen 00
bis 99
beginnen (mit vorgestellter null und mit beliebig viele a
´s enden können (auch kein a möglich). Der Regex akzeptiert die folgenden Eingaben:
00a
00
45aaa
34aaaaa
99aaaaaaaaaaaaaaaaaaaaaaaaa
Möglichkeiten mit Python Regex
Regex kann jegliche maschinell erzeugten Daten verstehen (parsen):
- Daten (
2020-10-05
) - URLs (www.gogole.de) und IPs (
134.234.234.2
) - E-Mail-Adresse (mein@mail.de)
- Logdateien nach Formaten
Mit Regex können Computer Suchergebnisse ausgeben, den Text nach Kriterien splitten oder die Existenz von Wörtern in einem Text ermitteln.
Grenzen von Python Regex
Regex ist kein Ei-legende Wollmilchsau 🙂
Regex eignet sich nur bedingt bei Dateien, die ein Mensch erstellt hat. Regex findet ein Datum nicht, wenn z. B. eine anführende Null beim Wochentag fehlt.
Kurzgesagt: Regex versteht Vertipper nicht.
Grundlagen von Regex: Endliche Automaten
Die folgende Tabelle soll Dich strukturiert in die Abkürzung des Regex einführen. Die Symbole und Klammern-Konstrukte kannst Du beliebig kombinieren.
Regex 101
Verwende die folgenden Online-Tools als Sandkasten für Deine Regex-Code.
Reguläre Ausdrücke | Bedeutung |
\d | Eine Ziffer von 0 bis 9 |
[a-z] oder [A-Z0-0] | Eckige Klammern geben immer ein Set an Ziffern an |
\b | |
\ | Backslash escaped Zeichen, die selbst ein regulärer Ausdruck sind |
a+ | 1x a oder mehrere a´s |
a* | 0x a´s, 1x a oder mehrere a´s |
k{2,5} | ZZweiwi bis fünf k´s hintereinander |
[^1-3] | Keine 1 bis 3 |
\w | Leerzeichen oder Absatz |
aaa? | Das letzte a ist optional |
(Sahne|Obers) | oder |
Regex und Automaten
Reguläre Ausdrücke basieren auf deterministischen endlichen Automaten (DEA) aus der theoretischen Informatik. Das Thema spielt eine große Rolle beim Parsen (Verstehen von Inhalten einer Datei) und Compilerbau.
Ein Compiler übersetzt Code in die Maschinensprache, die die CPU ausführen kann. Die Automaten beschreiben eine Sprache.
Der reguläre Ausdruck Ha+llo
beschreibt alle Worte von Hallo, die mindestens ein a aufweisen.
Der Hallo Automat
Ein Automat besteht auf 5 Elementen.
Automat A = (Zustände S, Zeichen T, Startzustand s0, Endzustand Se, Transaktionen δ)
6 Zustände kann der Automat annehmen.
Zustände S = {zustand1, zustand2, zustand3, zustand4, zustand5, zustand6}
Der Automat verfügt über die folgenden Zeichen
Zeichen T = {H,a,l,o}
Der Automat beginnt im Zustand 1
Startzustand s0 = zustand1
Mehrere Endzustände sind möglich. Hier nur einer.
Menge der Endzustände = zustand6
Transaktionen sind die Überführung von einem Zustand in den nächsten Zustand.
Transaktionen δ
zustand1 mit h zu zustand2
zustand2 mit a zu zustand3
zustand2 mit a zu zustand2
zustand3 mit l zu zustand4
zustand4 mit l zu zustand5
zustand5 mit o zu zustand6
Regex außerhalb von Python
Regex verwendet z. B. die Windows Suche oder Google Suche.
Die Suchalgorithmen haben Mechanismen implementiert, die die Suche mit Regex komfortabler machen sollen.
9 Schritte Tutorial – Regex in Python nutzen
Regex kannst Du mit Python über eine Standard-Bibliothek verwenden. Ich stelle Dir die 4 wichtigsten Funktionen der Python Bibliothek re vor.
Installation von Regex in Python
- Downloade Dir Python und führe den grafischen Installer aus
- Starte den Computer neu, damit Windows die Umgebungsvariablen laden kann.
- Öffne Dir Visual Studio Code
- Erstelle eine neue Datei in dem Coding Ordner regex.py
- Tipp in die regex.py ein
import re
und speichere die Datei - Öffne Deine Konsole (Strg + ö)
- Navigiere zum Speicherort der regex.py mit
cd SpeicherOrt
- Gebe ein
python regex.py
- Enter
Wenn Python nichts ausgibt und keine Fehlermeldung entsteht, dann ist Python mit der re
-Bibliothek installiert und die Umgebungsvariable korrekt gesetzt.
Textextraktion mit re.findAll()
Die Funktion .findAll()
der re-Bibliothek gibt einen Array mit allen Teilstrings zurück, die dem Regex entsprechen. Wenn Du z. B. alle Zahlen oder alle Schiffsnummern aus dem Text extrahieren möchtest, verwendest Du diese Funktion .findAll()
.
import re
text = "Wer 100 Tage mit den Schiff AL453 oder XM342 auf dem Meer fährt, dem kann 3 mal übel werden!"
alleZahlenMitMin1Stelle = re.findall(r"\d+ ",text)
print(alleZahlenMitMin1Stelle)
alleWoerter = re.findall(r"[A-Za-z]+ ",text)
print(alleWoerter)
schiffsNummern = re.findall(r"[A-Z]{2}[0-9]{3}",text)
print(schiffsNummern)
Wenn Du nach Symbolen suchen möchtest, die selbst ein Regex sind z. B. Anführungszeichen, Punkte oder Backslashs, musst Du das Symbol escapen. Das Escaping funktioniert mit einem Backslash
\“ oder \. oder \\ oder \?
Ja oder nein – re.search() beantwortet es
Die Funktion .search()
überprüft, ob in dem Text der reguläre Ausdruck vorkommt. Einen Boolean (wahr/falsch) liefert die Funktion zurück. Du kannst mit einer If-Verzweigung prüfen, ob der reguläre Ausdruck (Muster engl. Pattern) in Deinem Ausgangstext vorkommt.
if re.search(r"[A-Z]{2}[0-9]{3}",text):
print("Min. 1 Schiffsnummer gefunden")
else:
print("Keine Schiffsnummer gefunden")
textOhneNummer = "Wer 100 Tage mit den Schiff auf dem Meer fährt, dem kann 3 mal übel werden!"
if re.search(r"[A-Z]{2}[0-9]{3}",textOhneNummer):
print("Min. 1 Schiffsnummer gefunden")
else:
print("Keine Schiffsnummer gefunden")
Keine Schiffsnummer gefunden
Text aufteile mit re.split()
Die Funktion .split()
schneidet den gegebenen Text in Teilstrings. Als Parameter gibst Du das Symbol oder das Wort mit, wo die Funktion den Text teilen soll.
splitBySpace = re.split(r"\W",text)
print(splitBySpace)
Diese Funktion eignet sich zum Zählen von Worten in einem Text. Teile den Satz anhand der Leerzeichen und Absätzen auf und lasse Dir die Länge des Arrays ausgeben.
Korrekt mit re.match()
Für die Felder-Validierung nimmst Du die .match() Funktion.
name = "Steffen Lippke"
if re.match(r"[A-Za-z]{5,50}",name):
print("Korrekte Name")
else:
print("Bitte, nur Buchstaben verwenden")
nameFalsch = "TX1005"
if re.match(r"[A-Za-z]{5,50}",nameFalsch):
print("Korrekte Name")
else:
print("Bitte, nur Buchstaben verwenden")
Geniale Anwendungen von Regex in Python
Regex ist super praktisch für…
- Alle Dateien nach Wörtern / Muster zu durchsuchen
- Suchfunktion in Windows, Word oder VSCode
- Validierung von Eingaben: Hat der Nutzer seine Telefonnummer oder seinen Namen in das Namensfeld geschrieben? Regex kann prüfen, ob die Eingaben vom äußeren Format korrekt sind (nur Buchstaben im Namensfeld).
- Die Migration von Daten: Wenn Du ein Datenformat in ein anderes Datenformat umwandeln möchtest, musst Du mit einem Parser, der auf Regex basiert, die Werte auslesen und strukturiert in ein neues Format schreiben.
Mein Tipp: Web-Scraping mit Regex Python
Downloade Dir strukturierte Newsbeiträge, Produktlisten, Preislisten und andere Daten aus dem Netz, um diese zu analysieren. Coole Projekt mit Web Scraping sind möglich:
- In welchen Monat sind Grafikkarten am günstigsten?
- Welche Bahnverbindung ist am pünktlichsten?
- Wie berichten die Medien über Thema X?