Мне нужна помощь с регулярным выражением Java.
Я хотел бы выбрать ответы на вопрос викторины.
Проблема в том, что ответы могут проходить в несколько строк с разрывами строк и т. Д. Мне удалось выбрать вопросы до 2 строк, но не более чем в несколько строк.
Пример вопроса
Вопросы текст ... бла бла бла
л
A.
Это пустой текст
B.
Это еще более пустой текст
C.
Вы знаете, что больше
пустого текста -
D.
пустой текст
пустой текст
пустой текст
Существует как минимум 4 варианта ответа и максимум 6.
Я сделал много попыток -
Мой текущий результат
^[A-G]\.[\s]*^.*$
Но показывает только первую строку после буквы.
^[A-G]\.[\s]*^.*$[\s]+[^. *$]+.*
Однако это работает только для ответов с несколькими строками.
С многострочным и без Dotall
Я хотел бы сделать выбор от буквы [A-G] до пустой строки.
Кроме того, ответы E и G будут только необязательными.
результаты поиска:
Соответствие линии
Многострочный
Другие эксперименты были
([A]\..*)([B]\..*)([C]\..*)([D]\..*)
С Dotall - хорошо работает с 4 вопросами, но как я могу сделать E и G необязательными?
[B]\.[^\n\r]*[\s]*([^\n\r]*\s*[^\n\r]*?\s*[^\n\r]*)?
Просто работай, если в вопросе 2 строки. Очевидно
Есть идеи?
@ Java Code
private void getQuestionAnwser(String question) {
String patternQuestion="^[A-G]\\.[\\s](?:[^\\r\\n]+(?:\\r?\\n|$))*";
Pattern pattern = Pattern.compile(patternQuestion,Pattern.MULTILINE);
Matcher matcher = pattern.matcher(question);
matcher.matches();
// check all occurance
while (matcher.find()) {
matcher.start();
matcher.end();
questionAnwsers.add(matcher.group(0));
System.out.println(matcher.group(0));
}
String anwser=question.substring(question.indexOf("Answer:"));
questionAnwsers.add(anwser);
}
Выход:
A.
* * Б. тысяча сорок-девять
С
D.