webentwicklung-frage-antwort-db.com.de

python re.sub group: Nummer nach \ Nummer

Wie kann ich foobar durch foo123bar Ersetzen?

Das geht nicht:

>>> re.sub(r'(foo)', r'\1123', 'foobar')
'J3bar'

Das funktioniert:

>>> re.sub(r'(foo)', r'\1hi', 'foobar')
'foohibar'

Ich denke, es ist ein häufiges Problem, wenn man etwas wie \number Hat. Kann mir jemand einen Hinweis geben, wie ich damit umgehen soll?

142
zhigang

Die Antwort ist:

re.sub(r'(foo)', r'\g<1>123', 'foobar')

Relevanter Auszug aus den Dokumenten:

Zusätzlich zu den oben beschriebenen Zeichenumbrüchen und Rückverweisen verwendet\g die Teilzeichenfolge, die mit der Gruppe namens name übereinstimmt, wie in der Syntax (? P ...) definiert.\g verwendet die entsprechende Gruppennummer.\g2 ist daher gleichbedeutend mit\2, ist jedoch in einem Ersatz wie\g20 nicht mehrdeutig.\20 würde als Verweis auf Gruppe 20 interpretiert, nicht als Verweis auf Gruppe 2, gefolgt vom wörtlichen Zeichen '0'. Die Rückreferenz\g <0> wird in der gesamten Teilzeichenfolge ersetzt, die von der RE abgeglichen wird.

255
John Gaines Jr.