繁体   English   中英

Java中的正则表达式,连续多次使用相同的正则表达式

[英]Regular expressions in Java, same regex multiple times in a row

我想解析连续12个(通常)不同浮点数的字符串(前面有一些不相关的文本,标记一个字段),并希望它们全部以自己的捕获组结束,以便从中收集它们匹配器一次一个。 我注意到我成功写了以下内容:

Pattern lastYearIncomePattern = Pattern.compile("(.+\\{\\s)([0-9]{1,2}\\.[0-9]{3}\\s)([0-9]{1,2}\\.[0-9]{3}\\s)([0-9]{1,2}\\.[0-9]{3}\\s)([0-9]{1,2}\\.[0-9]{3}\\s)([0-9]{1,2}\\.[0-9]{3}\\s)([0-9]{1,2}\\.[0-9]{3}\\s)([0-9]{1,2}\\.[0-9]{3}\\s)([0-9]{1,2}\\.[0-9]{3}\\s)([0-9]{1,2}\\.[0-9]{3}\\s)([0-9]{1,2}\\.[0-9]{3}\\s)([0-9]{1,2}\\.[0-9]{3}\\s)([0-9]{1,2}\\.[0-9]{3}\\s)");

这是一个令人筋疲力尽的重复代码。 部分([0-9]{1,2}\\\\.[0-9]{3}\\\\s)将出现12次。

有没有办法做得更好? 我已经看过为自己定义该字符串,然后通过一些循环和一个StringBuilder将它添加到正则表达式中,但这一切看起来都太过分了。 显然,反向引用也不起作用,因为12个值不同。

我的第一种方法是写([0-9]{1,2}\\\\.[0-9]{3}\\\\s){12} ,但这会将所有12个浮点数放在一个长字符串中,这就是不是我想要的,因为我需要另一个模式然后逐个挑选浮动,然后重复疯狂的解决方案是首选。

谢谢

这个怎么样:

Pattern lastYearIncomePattern = java.util.regex.Pattern.compile("(.+\\{\\s)(([0-9]{1,2}\\.[0-9]{3}\\s){12})");

Matcher matcher = lastYearIncomePattern.matcher(input);
boolean found =matcher.find();
if(found){
  String[] values= matcher.group(2).split("\\s");
}

有用。 有兴趣看看它是否可以像你希望的那样在一个操作中完成。

您可以编写regexp以匹配单个float,然后使用Matcher.find(int)迭代这些事件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM