Linux中未使用python正则表达式检测到表情符号 [英] Emoji not detected with python regular expression in Linux
本文介绍了Linux中未使用python正则表达式检测到表情符号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个正则表达式来检测表情符号:
emoji = u'(ud83c[udf00-udfff]|ud83d[udc00-ude4fude80-udeff]|[u2600-u26FFu2700-u27BF])'
我使用以下命令进行测试:
re.match(emoji, u'U0001f602', re.UNICODE) # "😂"
问题是如果在我的MacOS计算机上找到匹配项,但不是在Linux Debian上
使用Conda发行版中的IPython4.0.1和Python2.7.11。
为什么在Linux上匹配有问题?
推荐答案
您的MacOS有一个narrow python build。试试这个:
unichr(0x0001f602)
我希望你会得到一个例外。这意味着您的Mac Python安装正在将FFFF以上的Unicode字符视为两个字符。
>>> u'ud83dude02'.encode('utf8')
'xf0x9fx98x82'
>>> u'U0001f602'.encode('utf8')
'xf0x9fx98x82'
>>> re.match(emoji, u'ud83dude02', re.UNICODE)
<_sre.SRE_Match object at 0x7fdf7405d6c0>
请注意ud83dude02和U0001f602如何生成相同的字节。MacOS将字符U0001f602视为两个8位祸不单行数字ud83dude02,这与您的正则表达式匹配。LINUX将其视为单个16位祸不单行数字,与您的正则表达式中的任何范围都不匹配。
您可以选择:1)将以下字符范围添加到Linux下的regex中:
ur‘[U0001F600-U0001F64F]’
但它将在Mac OS下中断正则表达式,根据here.
2)切换到Python 3。
3)使用--enable-unicode=ucs4选项在Mac上重新生成Python。
这篇关于Linux中未使用python正则表达式检测到表情符号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文