Python re.compile()-Methode

Python re 模块Python-re-Modul


re.compile()ist eine PythonreModulfunktion, die zumKompilieren regulärer Ausdrücke verwendet wird.

Das Vorkompilieren des Musters für reguläre Ausdrücke in ein Objekt für reguläre Ausdrücke ermöglicht seine Wiederverwendung und verbessert die Matching-Effizienz.

Wortdefinition: compileEs bedeutet compile.


Grundlegende Syntax und Parameter

re.compile()Wird verwendet, um ein kompiliertes Objekt für reguläre Ausdrücke zu erstellen.

Syntaxformat

re.compile(pattern, flags=0)

Parameterbeschreibung

  • pattern:
    • Typ: Zeichenkette (str)
    • Beschreibung: Das zu kompilierende Muster für reguläre Ausdrücke.
  • Flags:
    • Typ: Ganzzahl (int, optional)
    • Beschreibung: Flags für reguläre Ausdrücke, wie z. B.re.IGNORECASE、re.MULTILINEusw. Sie können|verwenden, um mehrere Flags zu kombinieren.

Funktionsbeschreibung

  • Rückgabewert: Gibt ein kompiliertes Objekt eines regulären Ausdrucks zurück (re.PatternObjekt).
  • Merkmale: Das kompilierte Objekt kann wiederverwendet werden; verglichen mit dem Aufruf vonre.search()Funktionen wie re.match() jedes Mal und dem erneuten Parsen des regulären Ausdrucks ist es effizienter.

Beispiele

Lass uns durch eine Reihe von Beispielen von einfach bis komplex gründlich meistern,re.compile()die Verwendung von re.compile().

Beispiel 1: Grundlegende Verwendung - Kompilieren eines regulären Ausdrucks

Beispiel

import re

# Kompilieren eines regulären Ausdrucks
pattern = re.compile(r'\d+')

# Verwende das kompilierte Objekt zum Abgleichen
text = "Ich habe 3 Äpfel und 5 Orangen"

result = pattern.findall(text)

print("Gefundene Zahlen:", result)

Erwartete Ausgabe:

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

Code-Erklärung:

  1. re.compile(r'\d+')Kompiliere einen regulären Ausdruck, der mit einer oder mehreren Ziffern übereinstimmt.
  2. Das nach der Kompilierung zurückgegebene Objektpatternhasfindall()、search()、match()Methoden wie match(), search(), findall() usw.
  3. Die Verwendung des kompilierten Objekts für den Abgleich ist effizienter.

Beispiel 2: Dasselbe Muster mehrfach wiederverwenden

Der größte Vorteil beim Kompilieren eines regulären Ausdrucks besteht darin, dass er wiederverwendet werden kann, wodurch wiederholtes Parsen vermieden wird.

Beispiel

import re

# Kompiliere einen regulären Ausdruck, der mit E-Mail-Adressen übereinstimmt
email_pattern = re.compile(r'\w+@\w+\.\w+')

# In mehreren Texten wiederverwenden
texts = [
    "Kontaktieren Sie [email protected] für Hilfe",
    "E-Mail: [email protected]",
    "Absender: [email protected]"
]

for text in texts:
    result = email_pattern.search(text)
    if result:
        print(f"Gefundene E-Mail: {result.group()}")

Erwartete Ausgabe:

找到邮箱: [email protected]
找到邮箱: [email protected]
找到邮箱: [email protected]

Code-Erklärung:

  • Kompiliere den regulären Ausdruck nur einmal und verwende ihn dann für mehrere Texte wieder.
  • Das kompilierte Objekt kannsearch()、findall()Methoden wie search() mehrmals aufrufen.

Beispiel 3: Flags verwenden

Du kannst beim Kompilieren Flags für reguläre Ausdrücke angeben, um das Übereinstimmungsverhalten zu ändern.

Beispiel

import re

# Flag zum Ignorieren der Groß-/Kleinschreibung beim Kompilieren angeben
pattern = re.compile(r'python', re.IGNORECASE)

text = "Python ist großartig, PYTHON ist mächtig"

# Das kompilierte Objekt zum Suchen verwenden
result = pattern.findall(text)

print("Gefunden:", result)

Erwartete Ausgabe:

找到: ['Python', 'PYTHON']

Code-Erklärung:

  • re.IGNORECASEMacht den Abgleich unabhängig von Groß-/Kleinschreibung.
  • Die Angabe von Flags zur Kompilierungszeit wendet sie auf alle Operationen an, die dieses Objekt verwenden.

Beispiel 4: Verwendung von Gruppen

Das kompilierte Objekt kann Gruppen verwenden, um bestimmte Inhalte zu extrahieren.

Beispiel

import re

# Regulären Ausdruck mit Gruppen kompilieren
pattern = re.compile(r'(\d{3})-(\d{4})-(\d{4})')

text = "Zhang San: 138-1234-5678, Li Si: 139-9876-5432"

# Alle Übereinstimmungen finden
results = pattern.findall(text)

for result in results:
    print(f"Vollständig: {result)
    print(f" Gruppe 1 (erste 3 Ziffern): {result)
    print(f" Gruppe 2 (mittlere 4 Ziffern): {result)
    print(f" Gruppe 3 (letzte 4 Ziffern): {result)

Erwartete Ausgabe:

完整: 138-1234-5678
  第1组(前3位): 138
  第2组(中间4位): 1234
  第3组(后4位): 5678
完整: 139-9876-5432
  第1组(前3位): 139
  第2组(中间4位): 9876
  第3组(后4位): 5432

Code-Erklärung:

  • Runde Klammern()Erstellen Sie drei Gruppen.
  • findall()Gibt eine Liste von Tupeln zurück, wobei jedes Tupel den Inhalt der Gruppen enthält.

Beispiel 5: Eigenschaften des kompilierten Objekts

Das kompilierte Objekt für reguläre Ausdrücke besitzt einige nützliche Eigenschaften.

Beispiel

import re

# Kompilieren eines regulären Ausdrucks
pattern = re.compile(r'\d+', re.IGNORECASE | re.MULTILINE)

print("Pattern:", pattern.pattern)
print("Flags:", pattern.flags)
print("Number of groups:", pattern.groups)
print("Group names:", pattern.groupindex)

Erwartete Ausgabe:

模式: \d+
标志: 50
分组数: 1
分组名: {}

Code-Erklärung:

  • pattern.pattern- Gibt die ursprüngliche Musterzeichenfolge zurück.
  • pattern.flags- Gibt den ganzzahligen Wert der Flags zurück.
  • pattern.groups- Gibt die Anzahl der Gruppen zurück.
  • pattern.groupindex- Gibt ein Wörterbuch der benannten Gruppen zurück.

Beispiel 6: Vergleich mit Funktionen des re-Moduls

Beispiel

import re

text = "ABC123DEF"

# Methode 1: re-Modulfunktionen direkt verwenden
result1 = re.search(r'\d+', text)

# Methode 2: Zuerst kompilieren, dann das kompilierte Objekt verwenden
pattern = re.compile(r'\d+')
result2 = pattern.search(text)

print("re.search():", result1.group())
print("pattern.search():", result2.group())

# Beide Methoden liefern dasselbe Ergebnis, aber das kompilierte Objekt kann wiederverwendet werden

Erwartete Ausgabe:

re.search(): 123
pattern.search(): 123

Code-Erklärung:

  • Die Ergebnisse beider Methoden sind gleich.
  • Wenn Sie dasselbe Muster mehrmals verwenden müssen, wird empfohlen,re.compile()es vorher zu kompilieren.

Python re 模块Python-re-Modul

Andere Erweiterungen