我需要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
答案 0 :(得分:0)
最简单的可能是匹配,直到第一个空行或输入结尾
^[A-G]\.[^\n]*\n(?:[^\n]+(?:\n|$))*
并处理dos行结尾
^[A-G]\.[^\r\n]*\r?\n(?:[^\r\n]+(?:\r?\n|$))*