import re
def filter_emoji(content):
try:
cont = re.compile(u'[\U00010000-\U0010ffff]')
except re.error:
cont = re.compile(u'[\uD800-\uDBFF][\uDC00-\uDFFF]')
return cont.sub(u'', content)
但是在实际应用中发现以上方法过滤不彻底,还会有部分表情保留下来,故此又找到了如下方法:
import re
def filter_emoji(content):
try:
# Wide UCS-4 build
cont = re.compile(u'['u'\U0001F300-\U0001F64F' u'\U0001F680-\U0001F6FF'u'\u2600-\u2B55]+')
except re.error:
# Narrow UCS-2 build
cont = re.compile(u'('u'\ud83c[\udf00-\udfff]|'u'\ud83d[\udc00-\ude4f\ude80-\udeff]|'u'[\u2600-\u2B55])+')
return cont.sub (u'', content)
此方法效果相对较好,前一种方法不能过滤的表情也能很好过滤。其原因也很好理解,无外乎前一种方法的正则匹配编码覆盖不全,所以有漏掉的表情未过滤。
最后,这里也对后一种方法所匹配对正则编码做一说明:
- # symbols & pictographs
- # emoticons
- # transport & map symbols
- # other
后一种方法的参考来源:Emoji的编码以及常见问题处理
非常感谢!!