用于选择Quzi-Anwsers的Java正则表达式

时间:2018-05-03 08:01:55

标签: java regex

我需要java正则表达式的帮助。 我想选择一个测验问题的答案。

问题在于答案可以通过换行等多行进行。我设法选择最多2行而不是多行的问题。

问题示例

问题文本...... bla bla bla BLA

一个。
这是空白文本

B中。
那是更加空白的文字

C.你知道更多的空白文字是

d。
空白文本
空白文本
空白文字

至少有4种答案可能性,最多6种。

我做了很多尝试 - 我目前的结果

^[A-G]\.[\s]*^.*$

但只显示信后的第一行。

^[A-G]\.[\s]*^.*$[\s]+[^. *$]+.* 

但是,这仅适用于多行的响应。

使用Multiline且没有Dotall

我想从字母[A-G]中选择空白行。 此外,答案E和G只是可选的。

搜索结果:
Matching a Line
Multiline

其他实验是 ([A]\..*)([B]\..*)([C]\..*)([D]\..*)
使用Dotall - 适用于4个问题,但我如何使E和G可选?

[B]\.[^\n\r]*[\s]*([^\n\r]*\s*[^\n\r]*?\s*[^\n\r]*)?
如果问题有2行就可以工作。显然

有什么想法吗?

@Java代码

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);

    }

输出:

一个。

下进行。

d

1 个答案:

答案 0 :(得分:0)

最简单的可能是匹配,直到第一个空行或输入结尾

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

并处理dos行结尾

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

regex101