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

3

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

Original Answer翻译成"最初的回答"

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

任务是去除文本并获得以下输出:
sent1_emojis = '  '
sent2_emojis = ' '
sent3_emojis = '' 

根据之前的问题(正则表达式匹配Emoji Unicode),我使用以下正则表达式来识别包含至少一个Emoji的字符串:

/[\u{1F600}-\u{1F64F}]/u

最初的回答

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个回答

3

只需稍微改动一下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
如果您需要删除文本,可以使用与任何字符匹配的模式,例如\w,它将匹配任何单词字符(等同于[a-zA-Z0-9_]),而不用担心表情符号。如果您需要匹配更多内容,例如空格,请使用[\w\s]。如果您需要点、逗号等,请使用[\w\s\.,-]。然后将任何匹配项替换为空字符串。

这样就可以除去除了表情符号以外的所有内容。

编辑:我在Python正则表达式引擎中获得了有趣的结果:演示

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接