When i changed two words in a string with other two words using re.sub i got the output. But when i tried that with numbers output is not coming correctly
>>> 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'
>>>
i don't know why this happens could u please tel me how to use this Thanks in advance
What happens is that you're passing in the replacement r'\1was\212345\3'
, and Python cannot determine whether you want the backreference number 2, 21, 211, ... . It just picks the largest one, 212345, which is obviously not a group index in your expression. Therefore, Python decides you meant the bytestring literal b'\212'
, which is a strange way of writing the b'\x8a'
.
To resolve the ambiguity, use the long backreference 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'
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With