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

如何用正则为每个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,提问作者Лион Соловев

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:15:04