2012-08-14 8 views
6

Wenn ich zwei Wörter in einer Zeichenfolge mit anderen zwei Wörtern mit re i geändert habe, bekam ich die Ausgabe. Aber wenn ich versucht, dass mit Zahlen Ausgang kommt nicht richtigMehrere Ersetzungen von Zahlen in String mit Regex Python

>>> import re 
>>> a='this is the string i want to change' 
>>> re.sub('(.*)is(.*)want(.*)','\\1%s\\2%s\\3' %('was','wanted'),a) 
'this was the string i wanted to change' 
>>> re.sub('(.*)is(.*)want(.*)','\\1%s\\2%s\\3' %('was','12345'),a) 
'this was\x8a345 to change' 
>>> 

ich weiß nicht, warum dies geschieht könnte u tel bitte, wie Sie mich im Voraus dieses Dank verwenden

Antwort

7

Was passiert, ist, dass Sie‘ Er gibt den Ersatz r'\1was\212345\3', und Python kann nicht bestimmen, ob Sie die Backreference-Nummer 2, 21, 211, ... möchten. Es wählt einfach den größten aus, 212345, was offensichtlich kein Gruppenindex in Ihrem Ausdruck ist. Daher entscheidet Python, dass Sie das Bytezeichenfolge-Literal b'\212' gemeint haben, was eine seltsame Art ist, die b'\x8a' zu schreiben.

die Mehrdeutigkeit zu beheben, verwenden Sie die lange Rückreferenzierung Syntax, \g<GROUP_NUMBER_HERE>:

>>> re.sub('(.*)is(.*)want(.*)','\\g<1>%s\\g<2>%s\\g<3>' %('was','12345'),a) 
'this was the string i 12345 to change' 
+0

Vielen Dank. Es sieht gut aus. – Myjab

Verwandte Themen