Python Regex Tutorial > findAll, match, search + split erklärt

Python Regex Steffen Lippke Coding Tutorial Coding Lab

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):

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.

04 Regex Sandkasten - Python Regex Tutorial Steffen Lippke
04 Regex Sandkasten – Python Regex Tutorial Steffen Lippke
Reguläre AusdrückeBedeutung
\dEine 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
\wLeerzeichen 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

00 Python Downlaod - Python Regex Tutorial Steffen Lippke
00 Python Downlaod – Python Regex Tutorial Steffen Lippke
  1. Downloade Dir Python und führe den grafischen Installer aus
  2. Starte den Computer neu, damit Windows die Umgebungsvariablen laden kann.
  3. Öffne Dir Visual Studio Code
  4. Erstelle eine neue Datei in dem Coding Ordner regex.py
  5. Tipp in die regex.py ein
    import re
    und speichere die Datei
  6. Öffne Deine Konsole (Strg + ö)
  7. Navigiere zum Speicherort der regex.py mit
    cd SpeicherOrt
  8. Gebe ein
    python regex.py
  9. 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)
 
[‚100 ‚, ‚453 ‚, ‚342 ‚, ‚3 ‚]
 
alleWoerter = re.findall(r"[A-Za-z]+ ",text)
print(alleWoerter)
[‚Wer ‚, ‚Tage ‚, ‚mit ‚, ‚den ‚, ‚Schiff ‚, ‚oder ‚, ‚auf ‚, ‚dem ‚, ‚Meer ‚, ‚dem ‚, ‚kann ‚, ‚mal ‚, ‚bel ‚]
 
schiffsNummern = re.findall(r"[A-Z]{2}[0-9]{3}",text)
print(schiffsNummern)
[‚AL453‘, ‚XM342‘]
03 Ausführen über die Konsole - Python Regex Tutorial Steffen Lippke
03 Ausführen über die Konsole – Python Regex Tutorial Steffen Lippke

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")
 
Min. 1 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)
 
[‚Wer‘, ‚100‘, ‚Tage‘, ‚mit‘, ‚den‘, ‚Schiff‘, ‚AL453‘, ‚oder‘, ‚XM342‘, ‚auf‘, ‚dem‘, ‚Meer‘, ‚fährt‘, “, ‚dem‘, ‚kann‘, ‚3‘, ‚mal‘, ‚übel‘, ‚werden‘, “]

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")
Korrekte Name

nameFalsch = "TX1005"
if re.match(r"[A-Za-z]{5,50}",nameFalsch):
    print("Korrekte Name")
else:
    print("Bitte, nur Buchstaben verwenden")
Bitte, nur Buchstaben verwenden
02 Bib re - Python Regex Tutorial Steffen Lippke
02 Bib re – Python Regex Tutorial Steffen Lippke

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?
Quellenangabe Bilder: Icons und SVG-Grafiken im Titelbild von Microsoft PowerPoint 2019, frei verfügbar nach EULA

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.