在Python中从Unicode文本中过滤出多个表情符号

时间:2019-04-22 09:42:55

标签: python regex unicode emoji

假设我们有以下包含表情符号的字符串:

sent1 = '  right'
sent2 = 'Some text?! '
sent3 = ''

任务是删除文本并获得以下输出:

sent1_emojis = '  '
sent2_emojis = ' '
sent3_emojis = '' 

根据过去的问题(Regex Emoji Unicode),我使用以下正则表达式来标识至少包含一个表情符号的字符串:

emoji_pattern = re.compile(u".*(["
u"\U0001F600-\U0001F64F"  # emoticons
u"\U0001F300-\U0001F5FF"  # symbols & pictographs
u"\U0001F680-\U0001F6FF"  # transport & map symbols
u"\U0001F1E0-\U0001F1FF"  # flags (iOS)
                "])+", flags= re.UNICODE)

为了获得输出字符串,我使用以下命令:

re.match(emoji_pattern, sent1).group(0)

以此类推。

sent2字符串有问题。 re.match(emoji_pattern, sent1).group(0)返回整个sent2,而不是仅返回表情符号。

2 个答案:

答案 0 :(得分:1)

emoji_pattern中的微小变化即可完成工作:

emoji_pattern = re.compile(u"(["                     # .* removed
u"\U0001F600-\U0001F64F"  # emoticons
u"\U0001F300-\U0001F5FF"  # symbols & pictographs
u"\U0001F680-\U0001F6FF"  # transport & map symbols
u"\U0001F1E0-\U0001F1FF"  # flags (iOS)
                "])", flags= re.UNICODE)             # + removed

for sent in [sent1, sent2, sent3]:
    print(''.join(re.findall(emoji_pattern, sent)))




答案 1 :(得分:1)

如果您需要删除文本,则可以不必担心表情符号,只需使用可匹配任何字符的模式,例如\w,它将匹配任何单词字符(等同于[a-zA-Z0-9_]) 。如果您需要更多匹配,例如。空格,请使用[\w\s]。如果需要点,逗号等,请使用[\w\s\.,-]。然后将所有匹配项替换为空字符串。

这样,您将删除表情符号以外的所有内容。

编辑:我在Python regex引擎中得到了有趣的结果:Demo

我使用了[\u0000-\uFFFF],它应该匹配任何字符。令人惊讶的是,它不匹配表情符号,而.(点,表示任何字符)不匹配表情符号。