Nicht-erfassende Klammern in Python Regex
Klammern ( ) erfüllen zwei Funktionen -
das Gruppieren von Zeichen und die Funktion der Erfassungsgruppe. Und
was macht man, wenn man gruppieren muss, aber
nicht in der Erfassungsgruppe speichern will? Um dieses Problem
zu lösen, wurden spezielle nicht-erfassende
Klammern (?: ) erfunden - sie gruppieren,
speichern aber nicht in der Erfassungsgruppe.
Beispiel
Im folgenden Beispiel brauchen wir die ersten Klammern zum Gruppieren und die zweiten - für die Erfassungsgruppe. Allerdings speichern beide Klammern Daten in der Erfassungsgruppe:
txt = 'abab123'
res = re.search('(ab)+([1-9]+)', txt)
Als Ergebnis werden wir in unseren Erfassungsgruppen Folgendes haben:
print(res[0]) # gibt 'abab123' aus
print(res[1]) # gibt 'ab' aus
print(res[2]) # gibt '123' aus
Beispiel
Lassen Sie uns die ersten Klammern so ändern, dass sie nur gruppieren, aber nicht in der Erfassungsgruppe speichern:
txt = 'abab123'
res = re.search('(?:ab)+([1-9]+)', txt)
Als Ergebnis wird sich in unserer ersten Erfassungsgruppe die Zahl befinden:
print(res[1]) # gibt '123' aus