python emoji 表情过滤

来源:互联网 发布:红蜻蜓软件 编辑:程序博客网 时间:2024/05/19 13:09

http://my.oschina.net/jiemachina/blog/189460

注意替换的这些emoji是标准的表情字符,每个表情本来是2个字节,替换成字符串后,每个表情就变成12个字符了,浪费了很多空间,不过简单,不需要专门写个map一一对应了;

把表情变成字符串

[python] view plain copy
  1. def filter_emoji(desstr,restr=''):  
  2.     ''''' 
  3.     过滤表情 
  4.     '''  
  5.     try:  
  6.         co = re.compile(u'[\U00010000-\U0010ffff]')  
  7.     except re.error:  
  8.         co = re.compile(u'[\uD800-\uDBFF][\uDC00-\uDFFF]')  
  9.     return co.sub(restr, desstr)  

把字符串变成表情

[python] view plain copy
  1. def str_2_emoji(emoji_str):  
  2.     ''''' 
  3.     把字符串转换为表情 
  4.     '''  
  5.     if not emoji_str:  
  6.         return emoji_str  
  7.     h = HTMLParser.HTMLParser()  
  8.     emoji_str = h.unescape(h.unescape(emoji_str))  
  9.     #匹配u"\U0001f61c"和u"\u274c"这种表情的字符串  
  10.     co = re.compile(ur"u[\'\"]\\[Uu]([\w\"]{9}|[\w\"]{5})")  
  11.     pos_list=[]  
  12.     result=emoji_str  
  13.     #先找位置  
  14.     for m in co.finditer(emoji_str):  
  15.         pos_list.append((m.start(),m.end()))  
  16.     #根据位置拼接替换  
  17.     for pos in range(len(pos_list)):  
  18.         if pos==0:  
  19.             result=emoji_str[0:pos_list[0][0]]  
  20.         else:  
  21.             result=result+emoji_str[pos_list[pos-1][1]:pos_list[pos][0]]  
  22.         result = result +eval(emoji_str[pos_list[pos][0]:pos_list[pos][1]])  
  23.         if pos==len(pos_list)-1:  
  24.             result=result+emoji_str[pos_list[pos][1]:len(emoji_str)]  
  25.     return result