使用正则表达式python在字符串中多次替换数字

时间:2012-08-14 09:32:46

标签: python regex string

当我使用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'
>>>

我不知道为什么会发生这种情况,请你告诉我如何使用它 提前致谢

1 个答案:

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