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

Java如何编写正则调用String.replaceAll替换JSON中可变15位数字键名

问题原因

你之前写的正则string.replaceAll("^[0-9]{15}$","ID")不生效不是转义斜杠导致的,核心问题是^和$是全局首尾匹配符,只会匹配整个字符串开头/结尾刚好是15位数字的场景,而你的15位数字是JSON结构中间的键,自然匹配不到。

精准替换方案

要避免误匹配值中的15位数字,只需要给正则加JSON键的特征限制,用前后断言锁定匹配范围:只匹配被转义双引号包裹、后缀紧跟冒号的15位数字,也就是JSON键的专属格式。

Java环境下的正确写法如下:

String result = rawStr.replaceAll("(?<=\\\\\")[0-9]{15}(?=\\\\\":)", "ID");

正则规则说明:

  • (?<=\\\\\"):正向后顾断言,限定匹配位置的前面必须是转义双引号\"(Java字符串中反斜杠需要双重转义,所以写4个反斜杠)
  • [0-9]{15}:匹配连续15位纯数字
  • (?=\\\\\":):正向前瞻断言,限定匹配位置的后面必须是转义双引号加冒号\":

这种写法只会命中作为JSON键的15位数字,完全不会修改值字段里的数字,不会破坏JSON原有结构。

更稳妥的替代方案

如果对数据准确性要求极高,也可以先把转义后的JSON字符串解析为JsonObject,遍历对象的键集合,把符合15位数字规则的键替换为ID后再重新序列化为字符串,这种方案完全没有正则误匹配的风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:06:02