python中re.sub()的奇怪执行

时间:2015-03-03 17:44:40

标签: python regex string-substitution

考虑以下执行。

Python 2.7.2 (default, Sep 19 2012, 01:44:39)
[GCC 4.2.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import re
>>> old_value=1
>>> new_value=2
>>> re.sub('0x(..)'+format(old_value, '02x'), '0x\\1x'+format(new_value, '02x'), '0xab01')
'0xabx02'
>>> re.sub('0x(..)'+format(old_value, '02x'), '0x\\1'+format(new_value, '02x'), '0xab01')
'0xB'

所以基本上,我试图修改十六进制值,但只修改两个最低有效数字。在这个例子中,我尝试替换' 01'使用' 02',如果存在于输入字符串中。   第一次re.sub()调用的输出是预期的。但是,我完全不理解第二次调用的输出(当然,我想这样做)。这就是困扰我很长一段时间了,我倾向于问这可能是一个python bug?或者我在这里遗漏了什么?

1 个答案:

答案 0 :(得分:4)

'0x\\1'+format(new_value, '02x')'0x\\102',Python将\\102视为单个转义序列。因为正好有三个八进制数字,所以它被视为八进制转义(而不是对组102的引用),八进制102是字符B。要解决此问题,请写下'0x\\g<1>'+format(new_value, '02x')