Python re.compile()-Methode
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 von
re.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
# 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:
re.compile(r'\d+')Kompiliere einen regulären Ausdruck, der mit einer oder mehreren Ziffern übereinstimmt.- Das nach der Kompilierung zurückgegebene Objekt
patternhasfindall()、search()、match()Methoden wie match(), search(), findall() usw. - 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
# 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 kann
search()、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
# 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
# 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
# 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
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.
Andere Erweiterungen
Python-re-Modul