You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用re与string模块清理字符串无法删除emoji表情怎么解决

问题原因

你当前使用的string.printable仅覆盖ASCII可打印字符,而emoji属于Unicode扩展字符集,不在该范围内,因此不会被正则匹配删除。

解决方案

方案1:使用第三方emoji库(推荐,准确率高)

这种方法无需手动维护emoji的Unicode范围,适配所有常见emoji,操作最简单。
首先安装依赖:
pip install emoji

修改后的完整代码:

import re
import string
import emoji

s = '''Hi !こんにちは、私の給料は月額10000ドルです。 XO XO
私はあなたの料理が大好きです
私のフライトはAPX1999です。🌕💕
私はサッカーの試合を見るのが大好きです。
'''
# 先删除ASCII可打印字符
replaced = re.sub(f'[{string.printable}]', '', s)
# 再删除所有emoji
replaced = emoji.replace_emoji(replaced, replace='')
print(replaced)

方案2:纯标准库实现,手动匹配emoji Unicode范围

如果不想安装第三方依赖,可以直接用正则匹配emoji的Unicode通用范围进行删除,修改代码如下:

import re
import string

s = '''Hi !こんにちは、私の給料は月額10000ドルです。 XO XO
私はあなたの料理が大好きです
私のフライトはAPX1999です。🌕💕
私はサッカーの試合を見るのが大好きです。
'''
# 先删除ASCII可打印字符
replaced = re.sub(f'[{string.printable}]', '', s)
# 匹配emoji范围并删除
emoji_pattern = re.compile("["
        u"\U0001F600-\U0001F64F"  # 表情类emoji
        u"\U0001F300-\U0001F5FF"  # 符号/象形类emoji
        u"\U0001F680-\U0001F6FF"  # 交通/符号类emoji
        u"\U0001F1E0-\U0001F1FF"  # 国旗类emoji
                           "]+", flags=re.UNICODE)
replaced = emoji_pattern.sub('', replaced)
print(replaced)

拓展方案:正向匹配保留所需字符(更适合当前场景)

如果你清理的目标就是保留日文汉字、假名和日文标点,直接正向匹配保留内容反而更稳妥,不会漏掉其他未知的特殊字符:

import re

s = '''Hi !こんにちは、私の給料は月額10000ドルです。 XO XO
私はあなたの料理が大好きです
私のフライトはAPX1999です。🌕💕
私はサッカーの試合を見るのが大好きです。
'''
# 仅保留日文假名、汉字、日文常见标点
jp_pattern = re.compile(r'[^\u3040-\u309F\u30A0-\u30FF\u4E00-\u9FAF\u3000-\u303F、。]')
replaced = jp_pattern.sub('', s)
print(replaced)

以上三种方案运行后都可以得到你需要的预期输出。

内容的提问来源于stack exchange,提问作者sirimiri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 14:45:01