如何用正则为每个emoji两侧加空格并将多空格替换为单空格
你现有的正则已经能匹配到「字母/数字/横线组成的连续段」「特殊符号/emoji组成的连续段」「下一段字母/数字/横线」三个分组,直接按如下操作即可得到目标结果:
- 调用正则的
sub方法,替换规则写为r'\1 \2 \3',给三类分组之间各插入一个空格 - 额外执行一次多空格合并,处理原字符串里自带的冗余连续空格,同时去除首尾多余空格
示例完整代码:
import re raw_str = "❗foo-foo⚠ 📲9-8💸 🚶♀foo♀" # 这里把你原来正则里的[A-z]修正为[A-Za-z],避免匹配到A-z之间的[]^_`等非字母符号 regex_sws = re.compile(r"([A-Za-zА-яёЁ0-9−\-‒–一—―─]+)([^A-Za-zА-яёЁ0-9]+)([A-Za-zА-яёЁ0-9−\-‒–一—―─]+)", re.MULTILINE) # 首次插入空格 temp = regex_sws.sub(r"\1 \2 \3", raw_str) # 合并连续空格并去除首尾空格 result = re.sub(r"\s+", " ", temp).strip() print(result) # 输出:❗ foo-foo ⚠ 📲 9-8 💸 🚶♀ foo ♀
如果不想加第二步的多空格处理,也可以直接优化正则匹配逻辑,忽略原有空格后再插入单个空格,不过加一步多空格合并兼容性更好,能适配原字符串里本身就有零散空格的场景。
内容的提问来源于stack exchange,提问作者Лион Соловев
相关产品推荐
相关产品推荐

