Python3.9正则移除字符串emoji部分场景失效及Unicode查询求助
问题根因
你现有正则的匹配区间未覆盖🤣对应的Unicode编码。🤣的Unicode编码为U+1F923,属于补充象形符号区间,不在你当前列出的匹配范围内,因此无法被识别替换。
修复方案
清理原有正则的冗余区间,补充新增emoji所属的\U0001F900-\U0001F9FF区间即可,修正后代码如下:
from re import UNICODE, compile emoji_pattern = compile("[" u"\U0001F600-\U0001F64F" # 表情符号 u"\U0001F300-\U0001F5FF" # 符号与象形图 u"\U0001F680-\U0001F6FF" # 交通与地图符号 u"\U0001F1E0-\U0001F1FF" # 国旗 u"\U00002702-\U000027B0" # 杂项符号 u"\U0001F900-\U0001F9FF" # 补充象形符号(包含🤣等新emoji) u"\U000024C2-\U0001F251" u"\u200d" u"\u2640-\u2642" "]+", flags=UNICODE) # 测试之前失效的案例 data = 'www.google.co.uk/?🤣' result = emoji_pattern.subn(r'', data) # result --> ('www.google.co.uk/?', 1) 替换成功
Python 3.9查询emoji Unicode的方法
直接使用Python内置函数即可完成查询:
- 查询字符对应的Unicode编码:调用
ord()函数获取编码的十进制值,再转成十六进制格式即可
target_char = '🤣' print(hex(ord(target_char))) # 输出:0x1f923,对应正则中需要写的Unicode格式为 \U0001F923
- 查询编码对应的字符:调用
chr()函数传入十六进制编码值即可反向验证
print(chr(0x1F923)) # 输出:🤣
如果不需要严格自行维护正则规则,也可以直接使用第三方emoji库的emoji.replace_emoji()方法一键移除所有emoji,适配性更高。
内容的提问来源于stack exchange,提问作者Binit Amin
相关产品推荐
相关产品推荐

