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

求可替换非逗号后所有空白字符的正则表达式

正则表达式:替换非逗号后的空白字符为下划线

问题背景

需要将字符串中所有不在逗号之后的空白字符替换为下划线。尝试过正则表达式 (^|[^,])\s+,但该表达式会删除空白字符前的字符,导致结果不符合预期。

示例

原字符串:

{id=565189.0, server=Ealyn, merchantName=Nox, activeMerchants=[{id=f01b617d-2dc7-4597-2297-08dabad9a125, name=Nox, zone=Nebel horn, card={name=Bergstrom, rarity=2.0}, rapport={name=Energy X7 Capsule, rarity=3.0}, votes=0.0}]}

预期结果:

{id=565189.0, server=Ealyn, merchantName=Nox, activeMerchants=[{id=f01b617d-2dc7-4597-2297-08dabad9a125, name=Nox, zone=Nebel_horn, card={name=Bergstrom, rarity=2.0}, rapport={name=Energy_X7_Capsule, rarity=3.0}, votes=0.0}]}

解决方案

方案1:负向零宽后发断言(推荐)

使用正则表达式 (?<!,)\s+,将匹配到的内容替换为 _。

正则解释

  • (?<!,):负向零宽后发断言,确保当前位置的前一个字符不是逗号
  • \s+:匹配一个或多个空白字符

该正则只会选中那些不在逗号之后的空白,替换时不会影响前面的字符,完全匹配需求。

方案2:修正原有正则(利用反向引用)

如果要保留原有正则的思路,可调整替换逻辑以保留捕获的前导字符:

  • 正则:(^|[^,])\s+
  • 替换为:$1_(不同语言中反向引用语法可能有差异,比如JavaScript用$1,Python用\1)

逻辑说明

原有正则捕获了空白前的字符(要么是字符串开头,要么是非逗号字符),替换时将捕获的字符放回,再加上下划线,即可避免丢失前导字符。

验证效果

两种方案都能将示例中的Nebel horn转为Nebel_horn、Energy X7 Capsule转为Energy_X7_Capsule,同时保留逗号后的空白(如, server=Ealyn中的空格),与预期结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 00:45:40