Я пытаюсь извлечь некоторую информацию из строки, как указано ниже:Извлечение нескольких групп из строки?
[В последнее время многие, браны, инфляции, сценарии были предложены, -LRB-, см., Например, ,, - LSB-, 3, -RSB-, for, a, review, -RRB-, вместе, с их вложениями в, -LRB-, извращенные, -RRB-, компактифицированные, суперструны, модели, , in, a, good, package, with, the phenology, constraints, coming, from, particle, Physics, -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 .. Что я могу пропустить?
Спасибо за ваш быстрый ответ. Но теперь, когда я использую m.find, он снова возвращает только одно значение. Я немного смущен. Мой шаблон улавливает две одинаковые группы и, применяя while (m.find()), я ожидаю получить их через цикл. ИЛИ я должен написать тот же шаблон снова. Если это так, я должен знать, сколько групп существует в предложении, прежде чем применять регулярное выражение? Извините за мое плохое объяснение :( –
В принципе, один вызов 'm.find()' будет находить регулярное выражение один раз, после чего будет заполнять 'm.group (1)'. Когда вы * вызываете find again * m.group (1) 'будет заполнена следующим совпадением_. Вызов' m.find() 'возвращает логическое значение, указывающее, была ли найдена находка успешной, поэтому ставить ее в цикл while будет искать каждое совпадение. нужно знать, сколько совпадений существует. –
В основном вы должны заменить 'while (rgx)' на 'while (m.find())' и удалить вызов 'm.find()', который находится за пределами цикла while. –