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

Java应用中如何用正则移除*开头字符串后的引号?

解决方案

你需要的正则表达式要精准定位紧跟在*开头的字符串之后的双引号,可以用两种方式实现:

方式一:利用正向回顾后发断言

使用正则(?<=\\*[^\\\"]+)\",通过replaceAll替换为空字符串即可:

String input = "value1: *sample\", test\ntest: \"test\"\nnewtest: *newtest\"";
String result = input.replaceAll("(?<=\\*[^\\\"]+)\"", "");
System.out.println(result);

正则逻辑说明:

  • (?<=\\*[^\\\"]+):正向回顾后发断言,确保当前要匹配的双引号前面,是一个*加上至少一个非双引号的字符(也就是*开头的有效字符串)。
  • ":匹配目标双引号,替换为空就完成了移除。

方式二:利用捕获组

另一种更直观的写法是用捕获组,正则为(\\*[^\\\"]+)\",替换时保留捕获的内容:

String input = "value1: *sample\", test\ntest: \"test\"\nnewtest: *newtest\"";
String result = input.replaceAll("(\\*[^\\\"]+)\"", "$1");
System.out.println(result);

逻辑说明:

  • (\\*[^\\\"]+):捕获*开头的非双引号字符串序列。
  • ":匹配要移除的目标双引号。
  • 替换为$1(即捕获到的内容),相当于去掉了后面的双引号。

两种方式都能得到你期望的输出:

value1: *sample, test
test: "test"
newtest: *newtest

之前你用的"(?!.*")之所以选中所有双引号,是因为这个正则的逻辑是匹配「后面没有其他双引号」的双引号,和你要定位「跟在*开头字符串后」的需求完全不符,所以无法得到正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 21:50:39