当我使用re.sub改变其他两个单词的字符串中的两个单词时,我得到了输出。但是当我尝试使用数字时输出不正确
>>> 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'
>>>
我不知道为什么会发生这种情况,请你告诉我如何使用它 提前致谢
答案 0 :(得分:8)
您将传递替换r'\1was\212345\3'
,而Python无法确定您是否需要反向引用号2,21,211,....它只选择最大的一个,212345,这显然不是表达式中的组索引。因此,Python决定你的意思是bytestring文字b'\212'
,这是编写b'\x8a'
的一种奇怪方式。
要解决歧义,请使用长后向引用语法\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'