gpt4 book ai didi

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

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

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

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 个 float 都在一个长字符串中,这不是我想要的,因为我需要另一个模式来一个接一个地挑选 float ,然后重复疯狂解决方案是首选。

谢谢

最佳答案

这个怎么样:

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");
}

它有效。有兴趣看看是否可以像您希望的那样在一次操作中完成。

关于java - Java中的正则表达式,连续多次使用相同的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3604525/

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