Регулярное выражение Java для выбора Quzi-Anwsers - PullRequest
0 голосов
/ 03 мая 2018

Мне нужна помощь с регулярным выражением 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.

1 Ответ

0 голосов
/ 03 мая 2018

самое простое совпадение до первой пустой строки или конца ввода

^[A-G]\.[^\n]*\n(?:[^\n]+(?:\n|$))*

и для обработки концов линий DOS

^[A-G]\.[^\r\n]*\r?\n(?:[^\r\n]+(?:\r?\n|$))*

regex101

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...