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

Java中替换指定关键词后首个花括号内容的正则问题

解决Java正则替换特定关键词后首个花括号内容的问题

问题分析

你需要替换Honda之后首个花括号(含括号)内的内容,但之前的正则错误地把Honda到花括号前的文本也替换了,导致结果异常。

正确正则方案

这里提供两种可行的实现方式:

方案1:使用捕获组保留前后内容

通过捕获组把Honda到花括号前的文本、花括号后的引号分别保留,只替换花括号内的内容:

String output = input.replaceAll("(Honda.*?\"\\{).*?(\\}\")", "$1Civic$2");
  • 捕获组(Honda.*?\"\\{):匹配从Honda开始到"{的所有内容(非贪婪匹配,确保只找第一个花括号)
  • .*?:匹配花括号内的任意内容(非贪婪,避免匹配到后续无关的花括号)
  • 捕获组(\\}\"):匹配花括号闭合后的引号
  • 替换为$1Civic$2:保留前后捕获的内容,中间替换成目标文本Civic

方案2:使用正向断言精准定位目标

通过正向断言限定目标花括号的上下文,直接替换花括号及内部内容:

String output = input.replaceAll("(?<=Honda.*?\")\\{.*?\\}(?=\")", "Civic");
  • (?<=Honda.*?\"):正向断言,确保目标花括号前面存在Honda和一个引号(限定在model的取值范围内)
  • \\{.*?\\}:匹配第一个花括号及内部的所有内容
  • (?=\"):正向断言,确保目标花括号后面紧跟一个引号
  • 直接替换为Civic,刚好替换掉整个{year:2022, name:Accord}部分

验证结果

两种方案都能得到期望输出:

[{brand:”Toyota”, model:”Corolla”}, 
{brand:”BMW”, model:”X3”}, 
{brand:”Honda”, model:”Civic”}]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:55:39