我正在尝试从字符串中提取一些信息,如下所示:
[最近,很多,brane,通胀,情景,被提议,-LRB-,见,,,,,,-LSB-,3,-RSB-,for,a,review,-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组..我可能错过了什么?
答案 0 :(得分: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
答案 1 :(得分:1)
你必须在你的while循环中调用find:
while (m.find()) {