如何为大于\uFFFF
的字符解析unicode“string”?在
尝试了re
和regex
,但似乎无法正确匹配大于2个十六进制值的unicode字符。在
以任何unicode字符串为例(例如,在utf-8
中编码的tweet文本)
emotes = regex.findall('[\u263A\u263B\u062A\u32E1]',tweet_json_obj['text'])
if emotes: print "Happy:{0}".format(len(emotes))
输出是文本中包含的笑脸的数量,它的效果非常好!在但如果我尝试匹配unicode字符的表情集: http://www.fileformat.info/info/unicode/block/emoticons/index.htm
^{pr2}$输出是字符串中所有字符的(数字)匹配,减去空格。 regex是如何匹配tweet中的每个字符的,或者至少是它的外观字符串。可打印?在
对于大多数数据集,预期结果是返回0,因为我不希望人们插入这些表情符号,但他们可能。。。所以我想检查一下他们的存在。我的正则表达式不正确吗?在
BMP之外的代码点使用
\Uxxxxxxxx
(因此大写U
和8个十六进制字符)。您使用的是\uxxxx
,它只接受四个十六进制字符,00
不是unicode代码点的一部分:您需要在此处使用
^{pr2}$unicode
模式:演示:
您需要使用ucs4python构建,否则非BMP代码点是使用UTF16代理项对实现的,这在正则表达式中不能很好地工作。在
如果} ;宽版本返回1114111,窄版本返回65535。在
len(u'\U0001f600')
返回2,则您使用的是窄UCS2内部版本,或者可以查看^{在UCS2系统上,对于这种特定情况,还可以将UTF16代理项与表达式匹配:
这与组成与
[\U0001F600-\U0001F64F]
相同范围的UTF-16代理项对匹配,但是在狭窄的内部版本上:相关问题 更多 >
编程相关推荐