从 Python 中的文本中删除表情符号标记

Remove emoji flags from text in Python

我正在尝试从我的 Python 字符串中删除所有表情符号,包括澳门的表情符号标志。我已经尝试了表情符号库中的几个标准正则表达式和正则表达式,但没有成功删除它。 我的代码:

def remove_emoji(text):
    emoji_pattern = re.compile(
        u"(\ud83d[\ude00-\ude4f])|"  # emoticons
        u"(\ud83c[\udf00-\uffff])|"  # symbols & pictographs (1 of 2)
        u"(\ud83d[\u0000-\uddff])|"  # symbols & pictographs (2 of 2)
        u"(\ud83d[\ude80-\udeff])|"  # transport & map symbols
        u"(\ud83c[\udde0-\uddff])"  # flags (iOS)
        "+", flags=re.UNICODE)
    return emoji_pattern.sub('', text)

您的图案似乎并未表明您所针对的旗帜表情符号(可能还有其他字形)。

例如,删除标志:

def remove_emoji(text):
    emoji_pattern = re.compile(
        u'(\U0001F1F2\U0001F1F4)|'       # Macau flag
        u'([\U0001F1E6-\U0001F1FF]{2})|' # flags
        u'([\U0001F600-\U0001F64F])'     # emoticons
        "+", flags=re.UNICODE)

    return emoji_pattern.sub('', text)

注意大写字母 U (\U) 转义表示 32 位十六进制值。标志和表情符号在高 Unicode 值中 way。此外,标志似乎特别复杂,因为它们是两个代码点的组合。一旦你找到了正确的目标字符(如澳门旗帜所示),你可以使用字符集进行扩展(此处使用 Regional Indicator Symbols.

的所有对的表达式进行了演示

您也可以开始添加其他表情符号和符号的说明;这里以基本表情块为例。

用上面的定义:

flag = '\U0001F1F2\U0001F1F4'
emote = '\U0001F620'
​
print("flag: {!r} gone: {!r}".format(flag, remove_emoji(flag)))
print("emote: {!r} gone: {!r}".format(emote, remove_emoji(emote)))

产量:

flag: '' gone: ''
emote: '' gone: ''

您可以使用您想要定位的其他块进一步扩展它。我建议您单独查找它们,寻找 32 位表示法。请注意,您经常会看到它们写成 U+1Fxyz;对于 Python,这些需要重述为 \U0001Fxyz。如果您想删除所有符号 ("all emoji"),您可以使用广泛的字符集。但是,如果您想要精确并仅删除一组有限的符号,则需要小心使用。例如,您要定位的一组表情符号 Transport and Map Symbols 包含五个独立的范围,在整个表情符号集上有重叠。

这听起来有点自我推销,但我有一个 Python 库可以做到这一点(除其他外)。图书馆是 cucco 基本上你会做这样的事情:

from cucco import Cucco
cucco = Cucco()
cucco.replace_emojis('Your text')

不确定这是否适合您,但如果您可以尝试一下并告诉我结果,那就太好了。我总是乐于接受反馈,以便改进图书馆 ;)