Groovy中带条件替换特定字符串的实现方案求助
正则优化:特殊字符的条件替换
需求
- 将字符串中的**反斜杠(\)和转义双引号(")**替换为点号(.)
- 例外规则:当转义双引号(")后紧跟逗号(,)时,不执行替换
- 需用
replaceAll处理大体积payload
输入示例
{ "Name":"138.5\" Ultra\violet" "Id":"\\z\\\\\"", }
期望输出
{ "Name":"138.5. Ultra.violet" "Id":"..z......", }
现有问题代码
newcontent=newcontent.toString().replaceAll(/\\"/, '.') newcontent=newcontent.toString().replaceAll("\\\\", ".")
上述代码会无差别替换所有\"和\,包括逗号前的\",不符合需求。
解决方案
使用正向否定预查的正则表达式,一次性完成全局替换,提升大文本处理效率:
newcontent = newcontent.toString().replaceAll(/(\\")(?!,)|\\/g, '.');
正则说明
(\\")(?!,):匹配\",但仅当它后面不紧跟逗号时才会被替换为.\\:匹配所有单独的反斜杠\,统一替换为.g修饰符:开启全局匹配,处理所有符合条件的字符
这样就能精准满足需求:仅保留逗号前的\",其余所有目标字符全部替换为点号。
内容的提问来源于stack exchange,提问作者Hemant Mathuria
相关产品推荐
相关产品推荐

