Python移除简单表情符号:如何保留标点仅删除表情?
移除文本中的表情符号(保留正常标点)
嘿,我来帮你搞定这个问题!要精准移除像;-)这类颜文字表情,同时保留?这类正常标点,正则表达式是最直接的解决方案。针对你的需求,我给你两种实用的处理方式:
1. 针对颜文字表情(如;-)、:)、:D)
这类表情通常由标点符号组合而成,我们可以写一个正则匹配这类模式,替换后再清理多余空格:
import re original_text = "ca va toi ;-) ?" # 匹配常见颜文字的正则:覆盖分号/冒号开头,可选连字符,括号/D类收尾的表情 emoticon_pattern = r'[:;=]-?[()DdPp]' # 第一步:移除表情 temp_text = re.sub(emoticon_pattern, '', original_text) # 第二步:清理多余的连续空格(移除表情后可能留下空白) cleaned_text = re.sub(r'\s+', ' ', temp_text).strip() print(cleaned_text) # 输出:ca va toi ?
正则解释:
[:;=]:匹配颜文字的起始符号(分号、冒号、等号,都是常见的表情开头)-?:匹配可选的连字符(有的表情带连字符如;-),有的不带如:))[()DdPp]:匹配表情的收尾符号(括号、大小写D/P,对应微笑、大笑、吐舌头这类表情)
如果你的场景里还有其他特殊颜文字(比如:-@、:*),可以扩展这个正则的字符集,比如改成[:;=]-?[()DdPp@*]就行。
2. 同时处理Unicode表情(如😊😎)
如果你的文本里还有Unicode标准表情,也可以用下面的正则一起移除:
import re original_text = "ca va toi ;-) 😊 ?" # 合并颜文字和Unicode表情的正则 combined_pattern = r'[:;=]-?[()DdPp]|[\U0001F600-\U0001F64F\U0001F300-\U0001F5FF\U0001F680-\U0001F6FF\U0001F1E0-\U0001F1FF]' temp_text = re.sub(combined_pattern, '', original_text) cleaned_text = re.sub(r'\s+', ' ', temp_text).strip() print(cleaned_text) # 输出:ca va toi ?
这个Unicode正则覆盖了绝大多数常见的表情符号范围,基本能满足日常需求。
内容的提问来源于stack exchange,提问作者mee
相关产品推荐
相关产品推荐

