gpt4 book ai didi

java - 从字符串中提取多个组?

转载 作者:行者123 更新时间:2023-12-01 22:27:29 25 4
gpt4 key购买 nike

我正在尝试从字符串中提取一些信息,如下所示:

[最近,,,许多,膜,通货膨胀,情景,被提议,-LRB-,参见,,,例如,,,-LSB-,3,-RSB-,对于,a,审查,-RRB -,,,与它们的嵌入一起进入-LRB-,扭曲的-RRB-,紧凑的超弦模型,,,在一个好的包中与现象学的约束,来自粒子物理-LRB-,参见,,,例如,,,-LSB-,4,-RSB-,-RRB-,.]

所以我需要提取的是方括号之间出现的值(例如-LSB-、3、-RSB-、&& -LSB-、4、-RSB-、)

这是我的代码的相关片段:

String pttrn = ".*-LSB-,\\s(\\d),\\s-RSB-,.*"; 
Pattern pattern = Pattern.compile(pttrn);
m = pattern.matcher(sentence.toString()); rgx = m.find();
int count = 0;
while (rgx) {
String ref = (m.group(1));
count++;
System.out.println("found: " + count + " : " + m.start() + " - " + m.end());
statement.clearParameters();
statement.setString(1, rs.getString("ut"));
statement.setString(2, rs.getString("sec_title"));
statement.setString(3, ref);
statement.executeUpdate();

}

由于这段代码,我总是得到一个值。当我尝试 m.group(2) 时,我收到一条错误消息,指出没有组 2。我可能会错过什么?

最佳答案

您的模式中只有一个组,因此单个匹配项仅提供一个组。您需要多次应用搜索:

while (m.find()) {
System.out.println(m.group(1));
}

这意味着您的代码应该是:

String input = "...";
Matcher matcher = Pattern.compile("-LSB-,\\s(\\d),\\s-RSB-,").matcher(input);

while (matcher.find()) {
System.out.println(matcher.group(1));
// the real work should go here
}

对我来说,打印出来的是:

3
4

关于java - 从字符串中提取多个组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28482532/

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