Python的regex模块匹配字符串中没有的无效unicode字符

2022-05-21 08:07:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我在运行这个代码时有一种奇怪的行为:

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

这里发生了什么?你知道吗

我在macossierra10.12.6上运行python2.7.13,regex.__version__是2.4.130。你知道吗


Tags: 代码searchobjectmatchunicode表情regex意义spanurud83disalnumu0001f618亲吻
1条回答
网友
1楼 ·

正如@pm2ring所提到的,这是因为Python是用UCS-2支持(窄范围)而不是UCS-4支持(宽范围)编译的。因此,Python在内部(错误地)将u'\U0001f618'表示为两个字符,这就解释了regex结果。你知道吗

更多信息:https://stackoverflow.com/a/29109996/4111012