Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Python

Python Reguläre Ausdrücke (re Modul) – Ein praktischer Leitfaden

Python Reguläre Ausdrücke (re Modul) – Ein praktischer Leitfaden

Entdecken Sie, wie Sie die Macht regulärer Ausdrücke in Python mit dem re-Modul nutzen. Schritt-für-Schritt-Beispiele veranschaulichen gängige Patterns, Matching-Techniken und fortgeschrittene Funktionen.

Was ist ein regulärer Ausdruck?

regulärer Ausdruck (RegEx) ist eine Zeichenfolge, die ein Suchmuster definiert. Zum Beispiel matcht das Pattern ^a...s$ jeden fünfbuchstabigen String, der mit a beginnt und mit s endet.

^a...s$

Patterns können gegen Strings gematcht werden. Die folgende Tabelle demonstriert, wie sich das Pattern mit verschiedenen Eingaben verhält:

AusdruckStringGematcht?
^a...s$absKein Match
aliasMatch
abyssMatch
AliasKein Match
Ein AbakusKein Match

Pythons re-Modul stellt die Werkzeuge bereit, die Sie für die Arbeit mit RegEx benötigen. Hier ist ein schnelles Beispiel, das re.match() verwendet, um ein Pattern gegen einen String zu prüfen:

import re
pattern = '^a...s$'
test_string = 'abyss'
result = re.match(pattern, test_string)
if result:
    print("Suche erfolgreich.")
else:
    print("Suche erfolglos.")

Wenn das Pattern gefunden wird, gibt re.match() ein Match-Objekt zurück; andernfalls None.


Patterns mit Metazeichen spezifizieren

Metazeichen sind spezielle Symbole, die die Regex-Engine auf einzigartige Weise interpretiert. Unten ist eine Schnellreferenz für die häufigsten Metazeichen:

[] . ^ $ * + ? {} () \ |


Eckige Klammern: []

Eckige Klammern definieren eine Menge von Zeichen zum Matchen. Zum Beispiel matcht [abc] jedes einzelne Vorkommen von a, b oder c.

AusdruckStringGematcht?
[abc]a1 Match
ac2 Matches
Hey JudeKein Match
abc de ca5 Matches

Bereiche können mit einem Bindestrich ausgedrückt werden, z. B. [a-e] entspricht [abcde]. Um eine Menge zu invertieren, platzieren Sie ein Caret ^ nach der öffnenden Klammer, z. B. [^abc] matcht jedes Zeichen außer a, b oder c.


Punkt: .

AusdruckStringGematcht?
..aKein Match
ac1 Match
acd1 Match
acde2 Matches (enthält 4 Zeichen)

Caret: ^ und Dollar: $

Das Caret behauptet den Stringanfang; das Dollarzeichen das Stringende. Zum Beispiel matcht ^a jeden String, der mit a beginnt, während a$ jeden String matcht, der mit a endet.

AusdruckStringGematcht?
^aa1 Match
abc1 Match
bacKein Match
^ababc1 Match
acbKein Match (beginnt mit a aber nicht gefolgt von b)
AusdruckStringGematcht?
a$a1 Match
formula1 Match
cabKein Match

Quantifier: *, +, ?, {n,m}

Diese Symbole steuern, wie oft das vorherige Element erscheinen soll.

  • * – null oder mehr Mal.
  • + – ein oder mehr Mal.
  • ? – null oder ein Mal.
  • {n,m} – mindestens n und höchstens m Mal.

Beispiele:

AusdruckStringGematcht?
ma*nmn1 Match
man1 Match
maaan1 Match
mainKein Match (a wird nicht von n gefolgt)
woman1 Match
AusdruckStringGematcht?
ma+nmnKein Match (kein a)
man1 Match
maaan1 Match
mainKein Match (a wird nicht von n gefolgt)
woman1 Match
AusdruckStringGematcht?
ma?nmn1 Match
man1 Match
maaanKein Match (mehr als ein a)
mainKein Match (a wird nicht von n gefolgt)
woman1 Match
AusdruckStringGematcht?
a{2,3}abc datKein Match
abc daat1 Match (bei daat)
aabc daaat2 Matches (bei aabc und daaat)
aabc daaaat2 Matches (bei aabc und daaaat)

Häufig verwendetes Pattern: [0-9]{2,4} matcht zwei bis vier aufeinanderfolgende Ziffern.

AusdruckStringGematcht?
[0-9]{2,4}ab123csde1 Match (bei ab123csde)
12 und 3456733 Matches (12, 3456, 73)
1 und 2Kein Match

Alternation: |

Der vertikale Strich implementiert logisches ODER. Zum Beispiel matcht a|b jeden String, der a oder b enthält.

AusdruckStringGematcht?
a|bcdeKein Match
ade1 Match (bei ade)
acdbea3 Matches (bei acdbea)

Gruppierung: ()

Klammern gruppieren Sub-Patterns und erfassen gematchte Substrings. Beispiel: (a|b|c)xz matcht jeden String, der a, b oder c gefolgt von xz enthält.

AusdruckStringGematcht?
(a|b|c)xzab xzKein Match
abxz1 Match (bei abxz)
axz cabxz2 Matches (bei axzbc cabxz)

Escaping: \

Verwenden Sie einen Backslash, um ein Metazeichen als Literal zu behandeln. Zum Beispiel matcht \$a die literale Sequenz $a anstatt $ als End-of-String-Anker zu interpretieren.


Spezielle Sequenzen

Spezielle Sequenzen vereinfachen gängige Patterns. Unten ist eine Referenzliste mit illustrierenden Beispielen.

Stringanfang: \A

AusdruckStringGematcht?
\Athedie sonneMatch
in die sonneKein Match

Wortgrenze: \b

AusdruckStringGematcht?
\bfoofussballMatch
ein fussballMatch
afussballKein Match
foo\bder fooMatch
der afoo testMatch
der afootestKein Match

Nicht-Wortgrenze: \B

AusdruckStringGematcht?
\BfoofussballKein Match
ein fussballKein Match
afussballMatch
foo\Bder fooKein Match
der afoo testKein Match
der afootestMatch

Ziffer: \d / Nicht-Ziffer: \D

AusdruckStringGematcht?
\d12abc33 Matches (bei 12abc3)
PythonKein Match
\D1ab34"503 Matches (bei 1ab34"50)
1345Kein Match

Whitespace: \s / Nicht-Whitespace: \S

AusdruckStringGematcht?
\sPython RegEx1 Match
PythonRegExKein Match
\Sa b2 Matches (bei a b)
Kein Match

Wortzeichen: \w / Nicht-Wort: \W

AusdruckStringGematcht?
\w12&": ;c 3 Matches (bei 12": ;c)
"%> !Kein Match
\W1a2%c1 Match (bei 1a2%c)
PythonKein Match

Stringende: \Z

AusdruckStringGematcht?
Python\Zich mag Python1 Match
ich mag Python ProgrammierungKein Match
Python ist spaßig.Kein Match

Tipp: Nutzen Sie einen Online-Regex-Tester wie regex101, um Patterns schnell zu erstellen und zu debuggen.


RegEx in Python verwenden

Pythons re-Modul bietet einen reichen Satz an Funktionen und Konstanten für Regex-Operationen. Importieren Sie es mit:

import re

Unten sind die gängigsten Utilities und ihre Verwendung.


re.findall()

Gibt eine Liste aller nicht-überlappenden Matches in einem String zurück.

# Alle Zahlen aus einem String extrahieren
import re
string = 'hallo 12 hi 89. Wie gehts 34'
pattern = '\d+'
result = re.findall(pattern, string)
print(result)  # Ausgabe: ['12', '89', '34']

Wenn kein Match gefunden wird, wird eine leere Liste zurückgegeben.


re.split()

Teilt einen String an jeder Stelle, wo das Pattern matcht, und gibt eine Liste von Substrings zurück.

import re
string = 'Zwölf:12 Neunundachtzig:89.'
pattern = '\d+'
result = re.split(pattern, string)
print(result)  # Ausgabe: ['Zwölf:', ' Neunundachtzig:', '.']

Verwenden Sie das optionale maxsplit-Argument, um die Anzahl der Splits zu begrenzen. Ein Wert von 0 (Standard) splittet bei jedem Match.

import re
string = 'Zwölf:12 Neunundachtzig:89 Neun:9.'
pattern = '\d+'
# Nur beim ersten Vorkommen splitten
result = re.split(pattern, string, 1)
print(result)  # Ausgabe: ['Zwölf:', ' Neunundachtzig:89 Neun:9.']

re.sub()

Ersetzt alle Vorkommen eines Patterns mit einem Ersetzungsstring.

# Alle Whitespace-Zeichen entfernen
import re
string = 'abc 12\nde 23 \n f45 6'
pattern = '\s+'
replace = ''
new_string = re.sub(pattern, replace, string)
print(new_string)  # Ausgabe: abc12de23f456

Um Ersetzungen zu begrenzen, geben Sie ein count-Argument an. Ein Wert von 0 ersetzt jeden Match.

new_string = re.sub(r'\s+', replace, string, 1)
print(new_string)  # Ausgabe:
# abc12de 23
# f45 6

re.subn()

Wie re.sub(), aber gibt ein Tupel zurück, das den neuen String und die Anzahl der durchgeführten Ersetzungen enthält.

new_string = re.subn(pattern, replace, string)
print(new_string)  # Ausgabe: ('abc12de23f456', 4)

re.search()

Findet die erste Position, wo das Pattern matcht.

string = "Python macht Spaß"
match = re.search('\\APython', string)
if match:
    print("Pattern im String gefunden")
else:
    print("Pattern nicht gefunden")
# Ausgabe: Pattern im String gefunden

Match-Objekt

Wenn ein Match gefunden wird, gibt re.search() ein Match-Objekt zurück. Gängige Methoden und Attribute umfassen:

  • group() – der gematchte Substring.
  • start() / end() – Indizes des Matches.
  • span() – ein Tupel von (start, end).
  • groups() – alle erfassten Gruppen.
string = '39801 356, 2102 1111'
pattern = '(\d{3}) (\d{2})'
match = re.search(pattern, string)
if match:
    print(match.group())
    print(match.group(1))
    print(match.group(2))
    print(match.groups())
    print(match.start(), match.end(), match.span())
else:
    print("pattern not found")
# Ausgabe:
# 801 35
# 801
# 35
# ('801', '35')
# 2 8 (2, 8)

Raw Strings verwenden (Präfix r)

Das Präfixieren eines String-Literals mit r behandelt Backslashes als literale Zeichen und verhindert versehentliche Escape-Sequenzen. Dies ist besonders nützlich bei Regex-Patterns.

string = '\n und \r sind Escape-Sequenzen.'
result = re.findall(r'[\n\r]', string)
print(result)  # Ausgabe: ['\n', '\r']

Für tiefergehende Erkundung des re-Moduls verweisen Sie auf die offizielle Python-Dokumentation.

Python

  1. Python-Schlüsselwörter & Bezeichner: Reservierte Wörter & Benennungskonventionen meistern
  2. Python-Datentypen meistern: Praxisleitfaden
  3. Python-Operatoren meistern: Umfassender Leitfaden
  4. Python-Funktionsargumente meistern: Positional, Keyword & Default-Parameter
  5. Python-Dictionaries meistern: Erstellung, Manipulation und fortgeschrittene Techniken
  6. Python Iteratoren meistern: Funktionsweise und Erstellung eigener Iteratoren
  7. Python Closures erklärt: Wie verschachtelte Funktionen Variablen erfassen
  8. Python datetime meistern: Praktischer Leitfaden zu Datumsangaben, Zeiten und Zeitzonen
  9. Pythons time-Modul meistern: Funktionen, Structs und praktische Beispiele
  10. Pythons time.sleep() meistern: Best Practices, Multithreading und Praxisbeispiele