gpt4 book ai didi

python - 在 Linux 中使用 python 正则表达式未检测到表情符号

转载 作者:太空狗 更新时间:2023-10-29 12:28:24 25 4
gpt4 key购买 nike

我有一个正则表达式来检测表情符号:

emoji = u'(\ud83c[\udf00-\udfff]|\ud83d[\udc00-\ude4f\ude80-\udeff]|[\u2600-\u26FF\u2700-\u27BF])'

我用这个命令测试:re.match(emoji, u'\U0001f602', re.UNICODE) # "😂"

问题是,如果在我的 macOs 机器上找到匹配项,但在 Linux Debian 上

使用来自 conda 发行版的 ipython 4.0.1 和 Python 2.7.11。

为什么在 Linux 上匹配问题?

最佳答案

您的 Mac 操作系统有一个 narrow python build .试试这个:

unichr(0x0001f602)

我希望你会得到一个异常(exception)。这意味着您的 Mac python 安装将 FFFF 以上的 unicode 字符视为两个字符。

>>> u'\ud83d\ude02'.encode('utf8')
'\xf0\x9f\x98\x82'

>>> u'\U0001f602'.encode('utf8')
'\xf0\x9f\x98\x82'

>>> re.match(emoji, u'\ud83d\ude02', re.UNICODE)
<_sre.SRE_Match object at 0x7fdf7405d6c0>

注意\ud83d\ude02 和\U0001f602 如何产生相同的字节。您的 Mac 操作系统将字符\U0001f602 视为两个 8 位十六进制数字\ud83d\ude02,这与您的正则表达式匹配。 Linux 将其视为单个 16 位十六进制数字,与您的正则表达式中的任何范围都不匹配。

您的选择是:1) 在 Linux 下将以下字符范围添加到您的正则表达式中:

你的'[\U0001F600-\U0001F64F]'

但它会破坏 Mac OS 下的正则表达式,根据 here.

2) 切换到 Python 3。

3) 使用 --enable-unicode=ucs4 选项在 Mac 上重建你的 python。

关于python - 在 Linux 中使用 python 正则表达式未检测到表情符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34679514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com