Python-re-Modul

Pythonsre-Modul ist ein Standardbibliotheksmodul für den Umgang mit regulären Ausdrücken.

Reguläre Ausdrücke (Regular Expression, abgekürzt regex oder regexp) sind ein leistungsstarkes Werkzeug zum Abgleichen, Suchen und Bearbeiten von Text.

Indem Sieredem Modul können Sie reguläre Ausdrücke in Python verwenden, um Zeichenketten zu verarbeiten.

Warum das re-Modul verwenden?

In der Textverarbeitung müssen wir oft nach bestimmten Mustern suchen oder bestimmte Zeichen ersetzen. Zum Beispiel das Validieren von E-Mail-Adressen, das Extrahieren von Links aus Webseiten oder das Formatieren von Text. Das manuelle Schreiben von Code, um diese Aufgaben zu erledigen, kann sehr mühsam sein, während reguläre Ausdrücke eine prägnante und effiziente Möglichkeit bieten, diese Probleme zu lösen.


Grundlegende Verwendung des re-Moduls

1. Importieren Sie das re-Modul

Bevor Sieredas Modul, müssen Sie es zuerst importieren:

import re

2. Häufige Funktionen des re-Moduls

2.1 re.match()

re.match()Die Funktion wird verwendet, um einen regulären Ausdruck vom Anfang einer Zeichenkette an abzugleichen. Wenn der Abgleich erfolgreich ist, gibt sie ein Match-Objekt zurück; andernfalls gibt sie zurückNone。

Beispiel

import re

pattern = r"hello"
text = "hello world"

match = re.match(pattern, text)
if match:
    print("Match successful:", match.group())
else:
    print("Match failed")

Ausgabe:

匹配成功: hello

2.2 re.search()

re.search()Die Funktion wird verwendet, um die erste Übereinstimmung eines regulären Ausdrucks in einer Zeichenkette zu suchen. Im Gegensatz zure.match()anders,re.search()erfordert nicht, dass die Übereinstimmung am Anfang der Zeichenkette beginnt.

Beispiel

import re

pattern = r"world"
text = "hello world"

match = re.search(pattern, text)
if match:
    print("Match successful:", match.group())
else:
    print("Match failed")

Ausgabe:

匹配成功: world

2.3 re.findall()

re.findall()Die Funktion wird verwendet, um alle Teilstrings in einer Zeichenkette zu finden, die mit dem regulären Ausdruck übereinstimmen, und gibt eine Liste zurück.

Beispiel

import re

pattern = r"\d+"
text = "Es gibt 3 Äpfel und 5 Orangen."

matches = re.findall(pattern, text)
print("Gefundene Zahlen:", matches)

Ausgabe:

找到的数字: ['3', '5']

2.4 re.sub()

re.sub()Die Funktion wird verwendet, um die Teile einer Zeichenkette zu ersetzen, die mit dem regulären Ausdruck übereinstimmen.

Beispiel

import re

pattern = r"Apfel"
text = "Ich habe einen Apfel."

new_text = re.sub(pattern, "Banane", text)
print("Ersetzter Text:", new_text)

Ausgabe:

替换后的文本: I have an banana.

Grundlegende Syntax regulärer Ausdrücke

1. Normale Zeichen

Normale Zeichen (wie Buchstaben, Ziffern) stimmen direkt mit sich selbst überein.

Beispiel

import re

pattern = r"Katze"
text = "Die Katze ist auf der Matte."

match = re.search(pattern, text)
if match:
    print("Match successful:", match.group())

Ausgabe:

匹配成功: cat

2. Sonderzeichen

In regulären Ausdrücken gibt es einige Sonderzeichen, die spezielle Bedeutungen haben. Zum Beispiel:

  • .: Entspricht einem beliebigen einzelnen Zeichen (außer Zeilenumbruch).
  • *: Entspricht dem vorangehenden Zeichen null oder mehrmals.
  • +: Entspricht dem vorangehenden Zeichen ein oder mehrmals.
  • ?: Entspricht dem vorangehenden Zeichen null oder einmal.
  • \d: Entspricht einem beliebigen Ziffernzeichen (äquivalent zu[0-9])。
  • \w: Entspricht einem beliebigen Buchstaben, einer Ziffer oder einem Unterstrichzeichen (äquivalent zu[a-zA-Z0-9_])。

Beispiel

import re

pattern = r"\d+"
Text = "Der Preis beträgt 100 Dollar."

match = re.search(pattern, text)
if match:
    print("Match successful:", match.group())

Ausgabe:

匹配成功: 100

3. Zeichensätze

Zeichensätze werden verwendet, um mit einem beliebigen einzelnen Zeichen aus einer Menge übereinzustimmen. Zum Beispiel,[abc]matchesa、boderc。

Beispiel

import re

Muster = r"[aeiou]"
text = "Hallo Welt!"

matches = re.findall(pattern, text)
print("Vokale gefunden:", matches)

Ausgabe:

找到的元音字母: ['e', 'o', 'o']

4. Gruppierung

Durch Gruppierung können Sie mehrere Zeichen zusammenfassen und mit ihnen arbeiten. Zum Beispiel:(abc)matchesabc。

Beispiel

import re

pattern = r"(ab)+"
text = "ababab"

match = re.search(pattern, text)
if match:
    print("Match successful:", match.group())

Ausgabe:

匹配成功: ababab

Praktische Übungen

Übung 1: E-Mail-Adressen validieren

Schreibe einen regulären Ausdruck, um das Format einer E-Mail-Adresse zu validieren.

Beispiel

import re

pattern = r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$"
email = "[email protected]"

if re.match(pattern, email):
    print("Gültige E-Mail-Adresse")
else:
    print("Ungültige E-Mail-Adresse")

Übung 2: Telefonnummern extrahieren

Einen regulären Ausdruck schreiben, um Telefonnummern aus Text zu extrahieren.

Beispiel

import re

pattern = r"\d{3}-\d{3}-\d{4}"
text = "Meine Telefonnummer ist 123-456-7890."

match = re.search(pattern, text)
if match:
    print("Gefundene Telefonnummern:", match.group())

1. Kernfunktionen

Methode Beschreibung Beispiel
re.compile(pattern) Einen regulären Ausdruck vorkompilieren (verbessert die Leistung bei Wiederverwendung) pat = re.compile(r'\d+')
re.search(pattern, string) Nach dem ersten Treffer in einer Zeichenkette suchen re.search(r'\d+', 'a1b2')→ Treffer'1'
re.match(pattern, string) Vom Anfang der Zeichenkette an übereinstimmen re.match(r'\d+', '123a')→ Treffer'123'
re.fullmatch(pattern, string) Die gesamte Zeichenkette stimmt vollständig überein re.fullmatch(r'\d+', '123')→ Treffer'123'
re.findall(pattern, string) Eine Liste aller nicht überlappenden Treffer zurückgeben re.findall(r'\d+', 'a1b22c') → ['1', '22']
re.finditer(pattern, string) Einen Iterator aller Treffer zurückgeben (einschließlich Positionsinformationen) for m in re.finditer(r'\d+', 'a1b2'): print(m.group())
re.sub(pattern, repl, string) Treffer ersetzen re.sub(r'\d+', 'X', 'a1b2') → 'aXbX'
re.split(pattern, string) Die Zeichenkette anhand von Treffern aufteilen re.split(r'\d+', 'a1b2c') → ['a', 'b', 'c']
re.escape() Sonderzeichen escapen re.escape("C:\\Users\\test.txt")
re.purge() Cache leeren re.purge()

2. Match-Objekt (Match) Methoden/Attribute

Methode/Attribut Beschreibung Beispiel
group() Die gesamte übereinstimmende Zeichenfolge zurückgeben m.group() → 'abc'
group(n) Den Inhalt der n-ten Capture-Gruppe zurückgeben m = re.search(r'(\d)(\d)', '12'); m.group(1) → '1'
groups() Ein Tupel aller Capture-Gruppen zurückgeben m.groups() → ('1', '2')
start()/end() Start-/Endposition der Übereinstimmung m.start() → 0
span() Den Übereinstimmungsbereich zurückgeben(start, end) m.span() → (0, 2)

3. Metazeichen regulärer Ausdrücke (teilweise)

Metazeichen Beschreibung Beispiel-Übereinstimmung
. Ein beliebiges Zeichen finden (außer Zeilenumbruch) a.c → 'abc'
\d Eine Ziffer finden \d+ → '123'
\D Ein Nicht-Ziffer-Zeichen finden \D+ → 'abc'
\w Ein Wortzeichen finden (Buchstabe, Ziffer, Unterstrich) \w+ → 'Ab_1'
\W Ein Nicht-Wortzeichen finden \W+ → '!@#'
\s Ein Whitespace-Zeichen finden (Leerzeichen, Tabulator usw.) \s+ → ' \t'
\S Ein Nicht-Whitespace-Zeichen finden \S+ → 'abc'
[] Zeichensatz [A-Za-z]→ ein beliebiger Buchstabe
^ Den Anfang einer Zeichenkette finden ^\d+→ Ziffer am Anfang
$ Das Ende einer Zeichenkette finden \d+$→ Ziffer am Ende
* Das vorhergehende Zeichen null oder mehr Male finden a* → '', 'aaa'
+ Entspricht dem vorangehenden Zeichen ein- oder mehrmals a+ → 'a', 'aaa'
? Entspricht dem vorangehenden Zeichen null oder einmal a? → '', 'a'
{m,n} Entspricht dem vorangehenden Zeichen m bis n Mal a{2,3} → 'aa', 'aaa'
| ODER-Operation cat|dog → 'cat'oder'dog'
() Erfassungsgruppe (\d+)→ Ziffern extrahieren

4. Kompilierungsflags (flagsparameter)

Flag Beschreibung Beispiel
re.IGNORECASE (re.I) Groß-/Kleinschreibung ignorieren re.search(r'abc', 'ABC', re.I)
re.MULTILINE (re.M) Mehrzeilenmodus (beeinflusst^und$) re.findall(r'^\d+', '1\n2', re.M) → ['1', '2']
re.DOTALL (re.S) Lassen.Entspricht allen Zeichen einschließlich Zeilenumbrüchen re.search(r'a.*b', 'a\nb', re.S)
re.ASCII Lassen\w, \Wusw. nur ASCII-Zeichen entsprechen re.search(r'\w+', 'こん', re.ASCII)→ kein Treffer
re.VERBOSE (re.X) Kommentare und Leerzeichen im Regex zulassen re.compile(r'''\d+ # 匹配数字''', re.X)

Beispiel

1. E-Mail-Adressen extrahieren

Beispiel

import re

text = "Kontakt: [email protected], [email protected]"
emails = re.findall(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b', text)
print(emails)  # Ausgabe: ['[email protected]', '[email protected]']

2. Datumsformate ersetzen

Beispiel

date_str = "Heute ist 05-15-2023"
new_str = re.sub(r'(\d{2})-(\d{2})-(\d{4})', r'\3year\1month\2day', date_str)
print(new_str)  # Ausgabe: "Heute ist 2023-05-15"

3. Abgleich mit mehreren Bedingungen

Beispiel

pattern = re.compile(r'''
    ^(?P<username>\w+) # Benutzername
    :(?P<password>\S+) # Passwort
    @(?P<domain>\w+\.\w+) # Domäne
$'''
, re.VERBOSE)

m = pattern.match("john:[email protected]")
if m:
    print(m.groupdict())  # Ausgabe: {'username': 'john', 'password': 'pass123', 'domain': 'example.com'}

4. Komplexe Zeichenketten aufteilen

Beispiel

text = "Apple1Banana2Cherry3Date"
parts = re.split(r'\d+', text)
print(parts)  # Ausgabe: ['Apple', 'Banana', 'Cherry', 'Date']

Hinweise

  1. Roh-Strings: Es wird empfohlen, Roh-Strings für reguläre Ausdrücke zu verwenden (r'\d'), um Konflikte mit Escape-Zeichen zu vermeiden.

  2. Gieriges Matching: Standardmäßig gieriges Matching (z. B..*die längstmögliche Übereinstimmung erzielt), müssen Sie verwenden,.*?um nicht-gieriges Matching zu implementieren.

  3. Leistungsoptimierung: Häufig verwendete reguläre Ausdrücke sollten vorrangigre.compile()Vorcompilierung verwenden.

  4. Backtracking-Probleme: Komplexe reguläre Ausdrücke können Leistungsprobleme verursachen (wie verschachtelte Quantifizierer(a+)+)。

Andere Erweiterungen