webentwicklung-frage-antwort-db.com.de

Python Regex ersetzt sofort Gruppen

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.

76
user1467267

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.

136
Martin Ender

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.

20
benelgiac