Python的regex模块匹配不在字符串中的无效unicode字符

时间:2017-10-04 10:25:19

标签: python regex unicode

我在运行此代码时遇到了一个奇怪的行为:

regex.search(ur'([^\p{IsAlnum}\s\.\'\`\,\-])', u'\U0001f618')

这应该匹配\U0001f618,这是一个接吻表情符号的unicode表示。然而,结果如下:

<regex.Match object; span=(0, 1), match=u'\ud83d'>

这根本没有意义,因为u'\ud83d'甚至不是有效的unicode字符。

我预料到了这一点:

<regex.Match object; span=(0, 1), match=u'\U0001f618'>

这里发生了什么?

我在macOS Sierra 10.12.6上运行Python 2.7.13,regex.__version__是2.4.130。

1 个答案:

答案 0 :(得分:0)

如@PM 2Ring所述,它正在发生,因为Python是使用UCS-2支持(窄范围)而不是UCS-4支持(宽范围)编译的。因此,Python内部(并且错误地)将u'\U0001f618'表示为两个字符,这解释了正则表达式的结果。

此处提供更多信息:https://stackoverflow.com/a/29109996/4111012

相关问题