考虑以下清单:
a_list = [' me así, bla es se ds ']
如何在新列表中提取a_list
中的所有表情符号?:
new_lis = [' ']
我尝试使用regex,但我没有所有可能的表情编码。
发布于 2017-03-31 17:39:14
您可以使用emoji
库。您可以通过检查是否包含在emoji.UNICODE_EMOJI
中来检查单个代码点是否是表情符号编码点。
import emoji
def extract_emojis(s):
return ''.join(c for c in s if c in emoji.UNICODE_EMOJI['en'])
发布于 2018-03-12 19:05:16
我认为重要的是要指出,前面的答案不适用于像这样的表情符号,因为它由4个表情符号组成,使用将返回4个不同的表情符号。同样的表情和皮肤颜色类似。
我的解决方案
包括emoji
和regex
模块。regex模块支持识别字素簇(呈现为单个字符的Unicode码点序列),因此我们可以像一样对emojis进行计数。
import emoji
import regex
def split_count(text):
emoji_list = []
data = regex.findall(r'\X', text)
for word in data:
if any(char in emoji.UNICODE_EMOJI['en'] for char in word):
emoji_list.append(word)
return emoji_list
测试
有更多的带有肤色的表情:
line = [" me así, se ds hello emoji hello how are you today"]
counter = split_count(line[0])
print(' '.join(emoji for emoji in counter))
产出:
包括旗子
如果您希望包括标志,就像Unicode范围将从to,所以添加:
flags = regex.findall(u'[\U0001F1E6-\U0001F1FF]', text)
到上面的函数和return emoji_list + flags
。
有关标志的更多信息,请参见这是对“匹配区域指示字符类的python正则表达式”的回答。。
用于更新的emoji
版本
要使用emoji >= v1.2.0,您必须添加一个语言说明符(如上面代码中的en
):
emoji.UNICODE_EMOJI['en']
发布于 2017-03-31 18:20:32
如果不想使用外部库,可以使用正则表达式和带有适当正则表达式的re.findall()
查找表情:
In [74]: import re
In [75]: re.findall(r'[^\w\s,]', a_list[0])
Out[75]: ['', '', '', '', '', '']
正则表达式r'[^\w\s,]'
是一个否定式字符类,它与任何不是单词字符、空格或逗号的字符匹配。
正如我在注释中提到的,文本通常包含单词字符和标点符号,这些字符和标点符号将很容易通过这种方法处理,对于其他情况,您只需手动将它们添加到字符类中即可。请注意,由于您可以在字符类中指定一系列字符,您甚至可以使其更短、更灵活。
另一种解决方案是使用接受表情符号的字符类([]
不含^
)来代替不包含非表情符号字符的否定式字符类。因为有大量的emojis 具有不同的unicode值,所以只需要将范围添加到字符类中。如果您想匹配更多的表情符号,这里是一个很好的引用,包含所有标准的表情符号,并为不同的表情符号提供相应的范围http://apps.timwhitlock.info/emoji/tables/unicode。
https://stackoverflow.com/questions/43146528
复制相似问题