Linux中未使用python正则表达式检测到表情符号 [英] Emoji not detected with python regular expression in Linux

查看:33
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆