Ich versuche, eine Python-Funktion zu schreiben, die Instanzen von Text mit geschweiften Klammern mit dem Inhalt der geschweiften Klammern ersetzt, während leere Klammerpaare allein lassen. Zum Beispiel:Python Regex - Ersetzen Klammertext mit dem Inhalt der Klammern
foo {} bar {baz}
würde foo {} bar baz
werden.
Das Muster, das ich zu diesem Zweck erstellt habe, ist {[^{}]+}
, d. H. Ein Text, der keine geschweiften Klammern enthält (um überlappende Übereinstimmungen zu vermeiden), die von geschweiften Klammern umgeben sind.
Die offensichtliche Lösung ist re.sub
mit meinem Muster zu verwenden, und ich habe festgestellt, dass ich den gefundenen Text mit \g<0>
verweisen kann:
>>> re.sub("{[^{}]+}", "A \g<0> B", "foo {} bar {baz}")
'foo {} bar A {baz} B'
kein Problem Also das ist. Ich bin jedoch fest, wie Sie die Klammern aus dem referenzierten Text trimmen. Wenn ich versuche, einen Bereich auf den Ersatz-String Anwendung:
>>> re.sub("{[^{}]+}", "\g<0>"[1:-1], "foo{}bar{baz}")
'foo{}barg<0'
Der Bereich vor den \g<0>
angewandt wird auf den gefundenen Text aufgelöst, und es trimmt die führenden \
und >
Hinter, so dass nur g<0
, die keine speziellen hat Bedeutung.
Ich habe versucht, die Definition auch eine Funktion, um die Trimmung auszuführen:
def trimBraces(string):
return string[1:-1]
aber wenig überraschend, dass nichts geändert hat.
>>> re.sub("{[^{}]+}", trimBraces("\g<0>"), "foo{}bar{baz}")
'foo{}barg<0'
Was fehlt mir hier? Vielen Dank im Voraus.
Einfach, funktioniert. Vielen Dank! – halbrd