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>