Python的re.sub从Unicode返回错误编码的数据

问题描述 投票:0回答:1
>>> re.sub('\w', '\1', 'абвгдеёжз')
'\x01\x01\x01\x01\x01\x01\x01\x01\x01'

为什么re.sub会以这种格式返回数据?在这种情况下,我希望它返回未更改的字符串'абвгдеёжз'。将字符串更改为u'абвгдеёжз'或传递flags=re.U不会执行任何操作。

python regex python-3.x replace python-unicode
1个回答
1
投票

因为'\1'是带有代码点1的字符(其repr形式为'\x01')。根据re.sub上的规则,string literals从未看到您的反斜线。即使您确实对它进行了转义,例如在r'\1''\\1'中,引用1也不是正确的数字;您需要括号来定义组。 r'\g<0>'将按照re.sub documentation中的描述工作。

© www.soinside.com 2019 - 2024. All rights reserved.