gpt4 book ai didi

Java RegEx 不会替换所有

转载 作者:行者123 更新时间:2023-11-29 04:08:27 25 4
gpt4 key购买 nike

我试图用“||”替换连接符号“+”在给定的多行脚本中,然而,java 正则表达式似乎只替换了 1 次出现,而不是全部。

String ss="A+B+C+D";
Matcher mm=Pattern.compile("(?imc)(.+)\\s*\\+\\s*(.+)").matcher(ss);

while(mm.find())
{
System.out.println(mm.group(1));
System.out.println(mm.group(2));
ss=mm.replaceAll("$1 \\|\\| $2");
}

System.out.println(ss); // Output: A+B+C||D, Expected: A||B||C||D

最佳答案

您只替换一个元素的原因是因为您匹配整行。您使用的正则表达式 "(?imc)(.+)\\s*\\+\\s*(.+)",匹配任何内容 (.+) 直到结束,然后恢复,所以它可以匹配其余的 \\s*\\+...。所以基本上你的组 1 是 .+ 几乎所有的东西,但最后一个 + 和以后。因此 replaceAll 只能匹配一次,并会在该次替换后终止。您需要的是找到 + 可选地包含在空格中的替换:

Pattern.compile("(?imc)\\s*\\+\\s*");

这应该匹配所有你想匹配的,而不是匹配整行,而只是匹配你的替换字符。

关于Java RegEx 不会替换所有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56697557/

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