Du liest:
Python RegEx: Reguläre Ausdrücke in Python

Python RegEx: Reguläre Ausdrücke in Python

von Pero
07.12.2020

Einführung in Python RegEx: reguläre Ausdrücke in Python

Eine Sequenz aus Zeichen, die ein Suchmuster darstellen, werden in Python „regular expression“, oder auch Python RegEx genannt. Diese Muster werden verwendet, um Strings oder Substrings zu finden. Die „regular expression“ wird für String-Operationen wie find() und replace() verwendet.

Anders als in anderen Programmiersprachen, besitzt Python ein separates Modul, das speziell für die „regular expression“ existiert. Das Modul trägt den Namen „re“. In diesem Artikel werden wir besprechen, wie wir das re-Modul für „regular expressions“ in Python nutzen können.

Das Python RegEx Modul: re

Starten wir mit einem kleinen Beispiel.

import re
muster = "abc"
st = "abc"
re.match(muster, st)

Zunächst importieren wir das re-Modul mithilfe des Schlüsselworts „import“. Im Anschluss definieren wir zwei Strings – „muster“ und „st“. Wir nutzen dann die match()-Funktion aus dem re-Modul, um zu überprüfen, ob die beiden übergebenen Strings gleich sind.

ergebnis = re.match(muster , st)

Das erste Argument der Funktion ist das Muster. Das Zweite ist der entsprechende String.

Das Python RegEx Modul: re

Solange das Muster und der String genau gleich sind, wird die match()-Funktion ein Objekt zurückgeben. Jetzt ändern wir den String zu „bcd“, um ein anderes Ergebnis zu erhalten.

Die Match Funktion des Python RegEx re-Moduls.

Die match()-Funktion wird nicht zurückgeben, da das Muster nicht zum String passt.

Metazeichen in Python RegEx

Unser Beispiel ist ziemlich einfach. In realem Code würde ein so einfaches Beispiel nicht vorkommen. Wir würden dabei die Metazeichen nutzen, um eine „regular expression“ zu erzeugen.

In Python existieren zahlreiche Metazeichen. Lasst uns diese jeweils anhand eines Beispiels besprechen. Außerdem werden wir einige der integrierten Funktionen des re-Moduls kennenlernen.

1 . Einschaltungszeichen ^

Um zu kontrollieren, ob ein String mit einem bestimmten Zeichen startet, verwenden wir das Einschaltungszeichen („^“).

import re
muster = "^h"
st1 = "hallo"
st2 = "hi"
st3 = "tschau"
ergebnis1 = re.match(muster, st1)
ergebnis2 = re.match(muster, st2)
ergebnis3 = re.match(muster, st3)
Das Einschaltungszeichen bei regulären Ausdrücken

Der erste und zweite String starten jeweils mit einem „h“. Der dritte String wiederum nicht.

2. Dollarzeichen $

Wenn wir wiederum nachvollziehen wollen, ob ein String mit einem bestimmten Zeichen endet, können wir das Dollarzeichen („$“) nutzen.

import re
muster = "o$"
st1 = "hallo"
st2 = "hi"
ergebnis1  = re.search(muster, st1)
ergebnis2 = re.search(muster, st2)

Dieses Mal verwenden wir die search()-Funktion, die den gleichen Zweck wie die match()-Funktion erfüllt.

Das Dollarzeichen bei regulären Ausdrücken

Der erste String ist erfolgreich, weil dieser auf das „o“ endet. Der Zweite wiederum nicht.

3. Eckige Klammern []

Mittels der eckigen Klammern können Zeichen, die im String gesucht werden sollen, definiert werden.

import re 
muster = "[a-i]"
st1 = "hallo welt"
ergebnis1 = re.findall(muster, st1)

„[a-i]“ beschreibt alle Kleinbuchstaben, die im Alphabet zwischen dem Buchstaben “a“ und „h“ liegen. Dieses Mal nutzen wir für die Operation die findall()-Funktion. Diese gibt eine List zurück, die alle im String gefundenen Buchstaben beinhaltet.

Eckige Klammern bei regulären Ausdrücken.

4. Periode .

Die Periode wird verwendet, um den String auf bestimmte Zeichen an einer spezifischen Position zu untersuchen.

import re
muster = "a.c"
st1 = "abc"
st2 = "abbc"
ergebnis1 = re.match(muster, st1)
ergebnis2 = re.match(muster, st2)

Der String erfüllt lediglich die Prüfung, wenn sich zwischen den Zeichen „a“ und „c“ genau ein weiteres Zeichen befindet.

Perioden bei regulären Ausdrücken.

Im ersten String befindet sich lediglich ein „b“ zwischen dem „a“ und „c“. Der String passt also in das Muster. Beim Zweiten befinden sich allerdings zwei Zeichen dazwischen. Dieser String widerspricht daher dem Muster.

5. Sternsymbol *

Das Sternsymbol erweitert die Funktion des vorherigen Zeichens. Es wird betrachtet, ob das entsprechende Zeichen kein- oder mehrfach zwischen den Buchstaben befindlich ist.

import re
muster = "ab*c"
st1 = "abbc"
st2 = "ac"
st3 = "adddc"
ergebnis1 = re.match(muster, st1)
ergebnis2 = re.match(muster, st2)
ergebnis3 = re.match(muster, st3)

Der erste und zweite String passen in das Muster, da sich das „b“ jeweils zwei bzw. null Mal an den gewünschten Stellen befindet. Im dritten String existiert allerdings ein „d“ zwischen den Zeichen und kein „b“. Deshalb passt dieser String nicht in das Muster.

Das Sternsymbol bei regulären Ausdrücken.

6. Pluszeichen +

Das Pluszeichen ist da, um zu prüfen, ob das entsprechende Zeichen ein- oder mehrfach an der Stelle vorkommt.

import re
muster = "ab+c"
st1 = "abbc"
st2 = "ac"
st3 = "adddc"
ergebnis1 = re.match(muster, st1)
ergebnis2 = re.match(muster, st2)
ergebnis3 = re.match(muster, st3)

Der erste und dritte String verhält sich gleich zur Verwendung des Sternsymbols. Der zweite String hingegen wird nicht in das Muster passen, da das Pluszeichen kein Nullvorkommen als gültig erachtet.

Das Pluszeichen bei regulären Ausdrücken.

7. Gruppierung ()

Die runden Klammern können zur Gruppierung von Submustern verwendet werden.

import re
muster = "(a|b|)cd"
st1 = "acd"
st2 = "bcd"
st3 = "zcd"
ergebnis1 = re.match(muster, st1)
ergebnis2 = re.match(muster, st2)
ergebnis3 = re.match(muster, st3)

Der erste und zweite String werden in das Muster passen, da jeweils ein „a“ oder „b“ gefolgt von einem „cd“ im String steht. Aber der dritte String passt hingegen nicht ins Muster, da in diesem weder ein „a“ noch ein „b“ vor dem „cd“ aufgeführt ist.

Die Gruppierung bei regulären Ausdrücken.

9. Geschwungene Klammern {}

Die Klammern werden normalerweise wie folgt geschrieben – {n.m}. Dabei gibt der erste Wert („n“) an, wie oft das Zeichen mindestens auftreten muss. Der zweite Wert („m“) gibt wiederum an, wie oft das Zeichen maximal aufgeführt sein darf. Wenn keine Maximalanzahl benötigt wird, kann der zweite Wert ignoriert werden.

import re
muster = "b{2,5}"
st1 = "abbc"
st2 = "abc"
st3 = "abbbbbbbbc"
ergebnis1 = re.search(muster, st1)
ergebnis2 = re.search(muster, st2)
ergebnis3 = re.search(muster, st3)

Der erste String passt in das Muster, da die Mindestanzahl überschritten wird. Nummer Zwei und Drei passen nicht in das Muster, da einmal zu wenig und im anderen Fall zu viele „b“ vorhanden sind.

Geschwungene Klammern bei regulären Ausdrücken.

Python RegEx mit Sets

Oben haben wir bereits die eckigen Klammern verwendet, um Zeichen zu finden. Genauso können wir diese nutzen, um mehrere spezifische Zeichen zu finden.

1 . [abc]

Der String wird nur in das Muster passen, wenn mindestens ein Zeichen im String auftaucht.

import re
muster = "[abc]"
st1 = "abcbcbc"
st2 ="xxxxx"
ergebnis1 = re.search(muster, st1)
ergebnis2 = re.search(muster, st2)
Python Sets in Kombination mit Python RegEx

2. [^abs]

Das Einschaltungszeichen bedeutet, dass der String nicht in das Muster passt, wenn einer der entsprechenden Buchstaben im String zu finden ist.

import re
muster = "[^abc]"
st1 = "abcbcbc"
st2 ="xxxxx"
ergebnis1 = re.search(muster, st1)
ergebnis2 = re.search(muster, st2)
Python Sets in Kombination mit Python RegEx

Grundsätzlich können wir also jedes gewünschte Muster in unsere eckigen Klammern einfügen. Zum Beispiel wird „[a-z]“ alle Kleinbuchstaben des Alphabets vergleichen. „[A-Z]“ wird alle Großbuchstaben abgleichen. Um gleichzeitig alle Klein- und Großbuchstaben zu untersuchen, könne wir „[a-zA-Z]“ verwenden. Gleichermaßen können wir für die Zahlen „[0-9]“ verwenden.

Zusammenfassung der regulären Ausdrücken: Python RegEx

„Regular expressions“ sind kompliziert. Es erfordert einige Zeit und Übung, um diese zu verstehen. In diesem Artikel haben wir die üblichsten Funktionen des re-Moduls und die Metazeichen kennengelernt. Wir können jetzt Muster erstellen und dabei sogar die Sets des Moduls verwenden. Um das Modul zu verstehen, braucht es allerdings viel Praxiserfahrung. Deshalb sollten wir die Verbindung aus Mustern (Metazeichen) und den Sets weiter üben.



Bislang gibt es keine Kommentare. Markier dein Revier und sei der Erste!

Schreibe einen Kommentar

Das könnte dich auch interessieren