Java 我可以使用正则表达式匹配特定字符的每三次出现吗?

Java 我可以使用正则表达式匹配特定字符的每三次出现吗?,java,regex,split,Java,Regex,Split,我有一个包含一些分隔值的字符串: 1.95;1.99;1.78;10.9;11.45;10.5;25.95;26;45;21.2 我想要实现的是分号每出现三分之一就被分割一次,因此我得到的String[]应该包含以下内容: result[0] = "1.95;1.99;1.78"; result[1] = "10.9;11.45;10.5"; result[2] = "25.95;26;45"; result[3] = "21.2"; 到目前为止,我已经尝试了几种正则表达式解决方案,但我所能

我有一个包含一些分隔值的字符串:

1.95;1.99;1.78;10.9;11.45;10.5;25.95;26;45;21.2
我想要实现的是分号每出现三分之一就被分割一次,因此我得到的
String[]
应该包含以下内容:

result[0] = "1.95;1.99;1.78";
result[1] = "10.9;11.45;10.5";
result[2] = "25.95;26;45";
result[3] = "21.2";
到目前为止,我已经尝试了几种正则表达式解决方案,但我所能做的就是找到分号之间的任何模式。例如:

(?<=^|;)[^;]*;?[^;]*;?[^;]*

(?你是对的。由于Java不支持无限长的查找断言(如果你想检查当前分号前是否有3、6、9或3*n个值,就需要使用该断言),因此不能使用
split()
来实现这一点。你的正则表达式可以完美地与“全部查找”一起工作方法,但如果你不能将其应用于你的情况,你就不走运了

在其他语言中(例如,基于网络的语言),以下正则表达式可以工作:

;(?<=^(?:[^;]*;[^;]*;[^;]*;)*)

(?您可以尝试以下方法:

String s = "1.95;1.99;1.78;10.9;11.45;10.5;25.95;26;45;21.2";
Pattern p = Pattern.compile(".*?;.*?;.*?;");
Matcher m = p.matcher(s);
int lastEnd = -1;
while(m.find()){
    System.out.println(m.group());
    lastEnd = m.end();
}
System.out.println(s.substring(lastEnd));
String re=“(?类似于:

 ([0-9.]*;){3}
不适合您的需要?需要注意的是,在组的末尾将有一个尾随;但是,您可以调整表达式以删除该尾随


我只是重新阅读了您的问题,虽然这个简单表达式适用于匹配组,但如果您需要将它提供给
split()
方法,很遗憾它无法完成此任务。

太好了!这完全符合需要!尤其是用于查找上一个匹配结束的\G。
 ([0-9.]*;){3}