gpt4 book ai didi

java - ReplaceAll 仅替换第一次出现的子字符串

转载 作者:行者123 更新时间:2023-11-30 06:44:25 25 4
gpt4 key购买 nike

我想将第一个括号内的 " 替换为 '。第二个括号内的子字符串应保持不变。示例:

String test = "(\"test1\", \"test2\") (\"test3\", \"test4\")"; //wanted output is ('test1', 'test2') ("test3", "test4")
String regex = "(^[^\\)]*?)\"(.*?)\"";
test = test.replaceAll(regex, "$1'$2'");
System.out.println(test); // output is ('test1', "test2") ("test3", "test4")
test = test.replaceAll(regex, "$1'$2'");
System.out.println(test); // output is ('test1', 'test2') ("test3", "test4")

为什么在第一次调用replaceAll时test2周围的"没有被替换?

最佳答案

这是使用边界匹配器的良好用例\G:

String test = "(\"test1\", \"test2\") (\"test3\", \"test4\")";
final String regex = "(^\\(|\\G(?!^),\\h*)\"([^\"]+)\"";

test = test.replaceAll(regex, "$1'$2'");
System.out.println(test);
//=> ('test1', 'test2') ("test3", "test4")

\G 断言位置在上一个匹配的末尾或第一个匹配的字符串的开头

RegEx Demo

关于java - ReplaceAll 仅替换第一次出现的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43896035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com