python正则表达式无法匹配特定的Unicode>;2个十六进制值

python正则表达式无法匹配特定的Unicode>;2个十六进制值,python,regex,python-2.7,unicode,Python,Regex,Python 2.7,Unicode,如何解析大于\uFFFF的字符的unicode“字符串” 尝试了re和regex,但似乎没有正确匹配大于2个十六进制值的unicode字符 以任何unicode字符串为例(例如,以utf-8编码的tweet文本) 输出是文本中包含的笑脸数,非常有用 但如果我尝试匹配unicode字符的表情符号集: 输出是字符串中所有字符的(数字)匹配,减去空格。 正则表达式是如何匹配tweet中的每个字符的,或者至少是看起来像string.printable的字符 对于大多数数据集,预期结果是返回0,因为我不

如何解析大于
\uFFFF
的字符的unicode“字符串”

尝试了
re
regex
,但似乎没有正确匹配大于2个十六进制值的unicode字符

以任何unicode字符串为例(例如,以
utf-8
编码的tweet文本)

输出是文本中包含的笑脸数,非常有用

但如果我尝试匹配unicode字符的表情符号集:

输出是字符串中所有字符的(数字)匹配,减去空格。 正则表达式是如何匹配tweet中的每个字符的,或者至少是看起来像string.printable的字符

对于大多数数据集,预期结果是返回0,因为我不希望人们插入这些表情,但他们可能。。。所以我想检查一下它们是否存在。我的正则表达式不正确吗?

BMP之外的代码点使用
\uxxxxx
(大写
U
和8个十六进制字符)。您使用的
\uxxx
,只包含四个十六进制字符,
00
不是unicode码点的一部分:

>>> len(u'\u01f600')
3
>>> len(u'\U0001f600')
1
>>> u'\u01f600'[0]
'\u01f6'
>>> u'\u01f600'[1:]
'00'
您需要在此处使用
unicode
模式:

u'[\U0001F600-\U0001F64F]'
演示:

这与组成与
[\U0001F600-\U0001F64F]
相同范围的UTF-16代理项对匹配,但在窄版本上:

>>> import sys
>>> sys.maxunicode
65535
>>> import re
>>> re.search(u'\ud83d[\ude00-\ude4f]', u'\U0001F600')
<_sre.SRE_Match object at 0x105e9f5e0>
导入系统 >>>sys.maxunicode 65535 >>>进口稀土 >>>重新搜索(u'\ud83d[\ude00-\ude4f]',u'\U0001F600')
谢谢,我花了两天时间研究unicode,从未将UCS2和UCS4与我访问平面中字符的问题联系起来>0。是的,我的sys.maxunicode返回65535,因此它是一个窄版本。我将构建一个UCS4,并使用“U”编码,再次感谢!
u'[\U0001F600-\U0001F64F]'
>>> import re
>>> re.search(u'[\U0001F600-\U0001F64F]', u'\U0001F600')
<_sre.SRE_Match object at 0xb73ead08>
ur'\ud83d[\ude00-\ude4f]'
>>> import sys
>>> sys.maxunicode
65535
>>> import re
>>> re.search(u'\ud83d[\ude00-\ude4f]', u'\U0001F600')
<_sre.SRE_Match object at 0x105e9f5e0>