我在运行此代码时遇到了一个奇怪的行为:
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。
答案 0 :(得分:0)
如@PM 2Ring所述,它正在发生,因为Python是使用UCS-2支持(窄范围)而不是UCS-4支持(宽范围)编译的。因此,Python内部(并且错误地)将u'\U0001f618'
表示为两个字符,这解释了正则表达式的结果。