2012-08-14 18 views
6

Kiedy zmieniłem dwa słowa w ciągu z innymi dwoma słowami za pomocą re.sub, otrzymałem wynik. Ale gdy próbowałem że wyjście z liczb nie jest prawidłowo przyjścieWiele podstawień liczb w łańcuchu przy użyciu python regex

>>> 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' 
>>> 

nie wiem dlaczego tak się dzieje, może u proszę tel mi, jak używać tego góry dziękuję

Odpowiedz

7

Co się dzieje, jest to, że” Ponowne przekazanie w zastępstwie r'\1was\212345\3', a Python nie może określić, czy chcesz wstecznej numeracji 2, 21, 211, .... Po prostu wybiera największą, 212345, która oczywiście nie jest indeksem grupowym w twoim wyrażeniu. W związku z tym Python decyduje, że chodziło o testowy kod literowy b'\212', co jest dziwnym sposobem napisania kodu b'\x8a'.

Aby rozwiązać niejednoznaczność, użyj długiej składni wsteczne, \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

dzięki. Wygląda dobrze. – Myjab

Powiązane problemy