Python Tutorials

Reguläre Ausdrücke in Python meistern

Spread the love

Reguläre Ausdrücke in Python meistern

Reguläre Ausdrücke (Regex oder RegExp) sind leistungsstarke Werkzeuge zum Musterabgleich in Zeichenketten. Pythons re-Modul bietet eine umfassende Schnittstelle für die Arbeit mit ihnen und ermöglicht so eine anspruchsvolle Textmanipulation und Datenextraktion. Dieses Tutorial führt Sie durch die wesentlichen Funktionen und Konzepte und befähigt Sie, die Leistungsfähigkeit regulärer Ausdrücke in Ihren Python-Projekten effektiv zu nutzen.

Inhaltsverzeichnis

  1. re.match(): Abgleich am Anfang
  2. re.search(): Finden des ersten Treffers
  3. re.compile(): Performance-Optimierung
  4. Flags: Modifizierung des Abgleichverhaltens
  5. Zeichensätze: Definition zulässiger Zeichen
  6. Suchen und Ersetzen mit re.sub()
  7. re.findall(): Extrahieren aller Treffer
  8. re.finditer(): Iterieren über Treffer
  9. re.split(): Aufteilen von Zeichenketten nach Muster
  10. Grundlegende Muster: Anker, Zeichenklassen
  11. Wiederholung: Quantoren und gieriger vs. nicht gieriger Abgleich
  12. Spezialsequenzen: Ziffern, Leerzeichen, Wortzeichen
  13. re.escape(): Umgang mit Sonderzeichen
  14. Erfassende Gruppen und die group()-Methode

1. re.match(): Abgleich am Anfang

Die Funktion re.match() versucht, das Muster nur ganz am Anfang der Zeichenkette abzugleichen. Sie gibt ein Match-Objekt zurück, wenn erfolgreich, andernfalls None.


import re

text = "Hello World"
pattern = "Hello"
match = re.match(pattern, text)

if match:
    print("Treffer gefunden:", match.group(0))
else:
    print("Kein Treffer gefunden")

re.search() durchsucht die gesamte Zeichenkette nach dem ersten Vorkommen des Musters. Im Gegensatz zu re.match() muss der Treffer nicht am Anfang stehen.


import re

text = "Hello World"
pattern = "World"
match = re.search(pattern, text)

if match:
    print("Treffer gefunden:", match.group(0))
else:
    print("Kein Treffer gefunden")

3. re.compile(): Performance-Optimierung

Für eine bessere Performance, insbesondere bei wiederholter Verwendung desselben Musters, kompilieren Sie es mit re.compile(). Dies erzeugt ein wiederverwendbares Musterobjekt.


import re

compiled_pattern = re.compile(r"d+")  # Muster kompilieren
text1 = "Es gibt 123 Äpfel"
text2 = "Und 456 Orangen"

match1 = compiled_pattern.search(text1)
match2 = compiled_pattern.search(text2)

print(match1.group(0))  # Ausgabe: 123
print(match2.group(0))  # Ausgabe: 456

4. Flags: Modifizierung des Abgleichverhaltens

Flags modifizieren den Abgleichprozess. re.IGNORECASE führt einen nicht-case-sensitiven Abgleich durch, und re.MULTILINE behandelt jede Zeile als separate Zeichenkette für ^ und $-Anker.


import re

text = "Hello world"
pattern = re.compile("hello", re.IGNORECASE)
match = pattern.search(text)
print(match.group(0))  # Ausgabe: Hello

5. Zeichensätze: Definition zulässiger Zeichen

Zeichensätze ([]) geben zulässige Zeichen an. Zum Beispiel gleicht [a-z] Kleinbuchstaben ab.


import re

text = "abc123XYZ"
pattern = re.compile("[a-z]+")
match = pattern.search(text)
print(match.group(0))  # Ausgabe: abc

6. Suchen und Ersetzen mit re.sub()

re.sub() ersetzt Vorkommen eines Musters durch eine Ersatzzeichenkette.


import re

text = "Hello World"
new_text = re.sub("World", "Python", text)
print(new_text)  # Ausgabe: Hello Python

7. re.findall(): Extrahieren aller Treffer

re.findall() gibt eine Liste aller nicht-überlappenden Treffer zurück.


import re

text = "123 abc 456 def"
numbers = re.findall(r"d+", text)
print(numbers)  # Ausgabe: ['123', '456']

8. re.finditer(): Iterieren über Treffer

re.finditer() gibt einen Iterator zurück, der Match-Objekte liefert. Speichereffizienter bei vielen Treffern in großen Zeichenketten.


import re

text = "123 abc 456 def"
for match in re.finditer(r"d+", text):
    print(match.group(0))  # Ausgabe: 123, 456 (in separaten Zeilen)

9. re.split(): Aufteilen von Zeichenketten nach Muster

re.split() teilt eine Zeichenkette basierend auf einem Muster auf.


import re

text = "Apfel,Banane,Kirsche"
fruits = re.split(r",", text)
print(fruits)  # Ausgabe: ['Apfel', 'Banane', 'Kirsche']

10. Grundlegende Muster: Anker, Zeichenklassen

  • .: Stimmt mit jedem Zeichen außer Zeilenumbruch überein.
  • ^: Stimmt mit dem Anfang der Zeichenkette überein.
  • $: Stimmt mit dem Ende der Zeichenkette überein.
  • []: Stimmt mit einer Menge von Zeichen überein (z. B. [abc], [a-z]).
  • [^...]: Stimmt mit jedem Zeichen überein, das *nicht* in der Menge enthalten ist (negierter Zeichensatz).

11. Wiederholung: Quantoren und gieriger vs. nicht gieriger Abgleich

  • *: Null oder mehr Vorkommen.
  • +: Ein oder mehr Vorkommen.
  • ?: Null oder ein Vorkommen.
  • {m}: Genau m Vorkommen.
  • {m,n}: Von m bis n Vorkommen.
  • *?, +?, ??, {m,n}?: Nicht-gierige Versionen (stimmen mit der kürzestmöglichen Zeichenkette überein).

12. Spezialsequenzen: Ziffern, Leerzeichen, Wortzeichen

  • d: Stimmt mit jeder Ziffer (0-9) überein.
  • D: Stimmt mit jedem Nicht-Ziffern-Zeichen überein.
  • s: Stimmt mit jedem Leerzeichen (Leerzeichen, Tabulator, Zeilenumbruch) überein.
  • S: Stimmt mit jedem Nicht-Leerzeichen überein.
  • w: Stimmt mit jedem alphanumerischen Zeichen (Buchstaben, Zahlen, Unterstrich) überein.
  • W: Stimmt mit jedem nicht-alphanumerischen Zeichen überein.

13. re.escape(): Umgang mit Sonderzeichen

re.escape() maskiert Sonderzeichen in einer Zeichenkette, sodass Sie sie als wörtliches Muster verwenden können, ohne unbeabsichtigte Regex-Interpretationen.

14. Erfassende Gruppen und die group()-Methode

Klammern () erstellen erfassende Gruppen. Die group()-Methode greift auf erfasste Teilzeichenketten zu.


import re

text = "Meine Telefonnummer ist 123-456-7890"
match = re.search(r"(d{3})-(d{3})-(d{4})", text)
if match:
    vorwahl = match.group(1)
    netz = match.group(2)
    rufnummer = match.group(3)
    print(f"Vorwahl: {vorwahl}, Netz: {netz}, Rufnummer: {rufnummer}")

Dieses Tutorial bietet eine solide Grundlage für Pythons re-Modul. Die weitere Erkundung fortgeschrittener Techniken wird Ihre Möglichkeiten der Zeichenkettenverarbeitung erheblich verbessern. Konsultieren Sie die offizielle Python-Dokumentation für eine vollständige Referenz.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert