【发布时间】:2018-05-03 08:01:54
【问题描述】:
我需要有关 java 正则表达式的帮助。 我想选择一个测验问题的答案。
问题是答案可以通过换行符等跨越几行。我设法选择了最多 2 行的问题,但没有超过几行。
问题示例
问题文本...bla bla bla 呵呵
A.
这是空白文本
B.
那是更多的空白文本
C.
你知道更多
空白文本是
D.
空白文本
空白文本
空白文本
至少有 4 个可能的答案,最多有 6 个。
我做了很多尝试—— 我目前的结果
^[A-G]\.[\s]*^.*$
但只显示字母后的第一行。
^[A-G]\.[\s]*^.*$[\s]+[^. *$]+.*
但是,这仅适用于多行响应。
使用多行和不使用 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);
}
输出:
一个。
B.
C.
D.
【问题讨论】: