Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于选择Quzi Anwsers的Java正则表达式_Java_Regex - Fatal编程技术网

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

用于选择Quzi Anwsers的Java正则表达式,java,regex,Java,Regex,我需要一个java正则表达式的帮助。 我想选择一个测验问题的答案 问题是答案可能会超过几行,有换行符等。我设法选择了最多两行的问题,但没有超过几行 一个问题的例子 问题文本…等等等等 布拉 A. 这是空白文本 B. 这甚至是空白文本 C.您知道更多的空白文本 D. 空白文本 空白文本 空白文本 答案至少有4种,最多6种 我做了很多尝试- 我目前的成绩 ^[A-G]\.[\s]*^.*$ 但只显示字母后的第一行 ^[A-G]\.[\s]*^.*$[\s]+[^. *$]+.* 但是,这仅适用

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

问题是答案可能会超过几行,有换行符等。我设法选择了最多两行的问题,但没有超过几行

一个问题的例子

问题文本…等等等等 布拉

A.
这是空白文本

B.
这甚至是空白文本

C.
您知道更多的
空白文本

D.
空白文本
空白文本
空白文本

答案至少有4种,最多6种

我做了很多尝试- 我目前的成绩

^[A-G]\.[\s]*^.*$
但只显示字母后的第一行

^[A-G]\.[\s]*^.*$[\s]+[^. *$]+.* 
但是,这仅适用于具有多行的响应

带多行和不带Dotall

我想从字母[AG]中选择一条空行。 此外,答案E和G只能是可选的

搜索结果:


其他实验为
([A]\.*)([B]\.*)([C]\.*)([D]\.*)

使用Dotall-可以很好地解决4个问题,但如何使E和G成为可选的

[B]\.[^\n\r]*[\s]*([^\n\r]*\s*[^\n\r]*?\s*[^\n\r]*)?

如果问题有两行,那就开始吧。很明显

有什么想法吗

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

    }
输出:

A

B

C


D.

最简单的方法可能是匹配到第一个空行或输入端

^[A-G]\.[^\n]*\n(?:[^\n]+(?:\n|$))*
和处理dos行结尾

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

谢谢你的回答。看起来我的文本格式不好。这里没有新行,而是先有一个空格,然后是新行。不幸的是,这在Java中似乎不起作用。我使用该工具进行了测试,并在我的帖子中添加了Java代码。但是链接的结果是一样的。事实上,你的问题是
[\s]
可以匹配空格或第一个换行符,第一行可以用不同的方式处理:使用
*
量词(0次或更多次,而不是
+
1次或更多次),更新答案就是这样!非常感谢你