>>> re.sub('\w', '\1', 'абвгдеёжз')
'\x01\x01\x01\x01\x01\x01\x01\x01\x01'
为什么re.sub会以这种格式返回数据?在这种情况下,我希望它返回未更改的字符串'абвгдеёжз'
。将字符串更改为u'абвгдеёжз'
或传递flags=re.U
不会执行任何操作。
因为'\1'
是带有代码点1的字符(其repr
形式为'\x01'
)。根据re.sub
上的规则,string literals从未看到您的反斜线。即使您确实对它进行了转义,例如在r'\1'
或'\\1'
中,引用1也不是正确的数字;您需要括号来定义组。 r'\g<0>'
将按照re.sub documentation中的描述工作。