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

时间:2017-05-11 00:57:26

标签: python python-3.x unicode emoji python-unicode

我正试图从我的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)

2 个答案:

答案 0 :(得分:2)

这听起来有点像自我推销,但我有一个可以做到这一点的Python库(除此之外)。该库是cucco,基本上你可以这样做:

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

不确定这是否适合您,但如果您可以试一试并让我知道结果会很好。我总是乐于接受反馈,所以我可以改进库;)

答案 1 :(得分:1)

您的模式似乎并不表示您要定位的旗帜表情符号(可能还有其他字形)。

例如,删除标志:

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值中方式。另外,标志看起来特别复杂,因为它们是双码点组合。一旦你有了正确的角色(如澳门国旗所示),你可以扩展一个字符集(这里用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。如果你想删除所有符号("所有表情符号"),你可以使用宽泛的字符集。但是如果你想要精确并只删除一组有限的符号,你需要小心。您定位的其中一个集合,例如Transport and Map Symbols,包含五个独立范围,并在完整的表情符号集上重叠。