Gibt es eine Möglichkeit, alle Gruppen mithilfe der Regex-Syntax direkt zu ersetzen?
Der normale Weg:
re.match(r"(?:aaa)(_bbb)", string1).group(1)
Aber ich möchte so etwas erreichen:
re.match(r"(\d.*?)\s(\d.*?)", "(CALL_GROUP_1) (CALL_GROUP_2)")
Ich möchte die neue Saite sofort aus den Gruppen erstellen, die die Regex gerade erfasst hat.
Schauen Sie sich re.sub
an:
result = re.sub(r"(\d.*?)\s(\d.*?)", r"\1 \2", string1)
Dies ist die Regex-Ersetzungsfunktion von Python. Die Ersetzungszeichenfolge kann mit sogenannten Rückverweisen (Backslash, Gruppennummer) gefüllt werden, die durch das ersetzt werden, was von den Gruppen abgeglichen wurde. Gruppen werden genauso gezählt wie bei der Funktion group(...)
, d. H. Beginnend mit 1
Von links nach rechts, indem Klammern geöffnet werden.
Die akzeptierte Antwort ist perfekt. Ich würde hinzufügen, dass Gruppenreferenz wahrscheinlich besser mit dieser Syntax erreicht wird:
r"\g<1> \g<2>"
für den Ersatzstring. Auf diese Weise umgehen Sie Syntaxeinschränkungen, bei denen auf eine Gruppe möglicherweise eine Ziffer folgt. Auch dies ist alles in der Dokumentation vorhanden, nichts Neues, nur manchmal auf den ersten Blick schwer zu erkennen.