首页 > 解决方案 > 正确识别字符串中的表情符号(Python)

问题描述

编辑:我在链接的重复问题中尝试了一种解决方案。答案使用regex并且regex.findall(r'\X', tweet)正在工作。但是,我刚刚更新了regex软件包,现在它失败了。不知道为什么到目前为止。

我正在尝试从推文中正确提取所有表情符号。我的问题是一些表情符号需要一个代码点,而其他表情符号(例如,国旗)需要两个代码点。例如:

tweet = RT @CreepyHorrorGal: • ☠ #creepy #horror

这是我在 Python 中打印推文时看到的。但是,当我这样做时:

for c in tweet:
    print(c)

我给我看:

...
a
l
:

•




☠


...

在这里,标志的两个代码点被分开并分别解释。还有下面的代码

tweet.encode('utf-16', 'surrogatepass').decode('utf-16').encode("raw_unicode_escape").decode("latin_1")

给我:

RT @CreepyHorrorGal: \u2022 \U0001f453\U0001f1ec\U0001f1e7\u2620\U0001f632\U0001f922 #creepy #horror

原则上,我了解所有输出。但我想知道,我的浏览器(Jupyter 笔记本)是否知道这\U0001f1ec\U0001f1e7是一个需要两个代码点的表情符号,特别是考虑到它被其他表情符号跟随并成功,中间没有空格。

以及如何可靠地正确提取所有表情符号?现在我使用一个简单的正则表达式,但它只适用于单个代码点,即我“销毁”标志。我该如何解决这个问题?

标签: pythonregexunicodeemojipython-unicode

解决方案


推荐阅读