我的文字包含以下格式的多个问题:
Q1
Question text 1?
1. Answer A
2. Answer B (+1p)
3. Answer C
4. Answer D
Q2
Question Text 2?
1. Answer A (+1p)
2. Answer B
3. Answer C (+1p)
4. Answer D
Q3
Question Text 3
1. Answer A
2. Answer B
3. Answer C (+1p)
正确答案标有(+ 1p)。 我想重新格式化,以便在下面的新行中说明正确的答案:
Q1
Question text 1?
1. Answer A
2. Answer B
3. Answer C
4. Answer D
Answer: B
Q2
Question Text 2?
1. Answer A
2. Answer B
3. Answer C
4. Answer D
Answer: A, C
Q3
Question Text 3
1. Answer A
2. Answer B
3. Answer C
Answer: C
这是否可以在Notepad ++中完成?
答案 0 :(得分:1)
正常表达对救援的魔力:
我们需要一个两步的方法,
附加Answer:
((\R\d\.\h+Answer\h+[A-Z]+\h?(\(\+1p\))?)+)
\1\r\nAnswer:
现在我们收集答案:
Answer ([A-Z])\h\(\+1p\)(.*?Answer: [A-Z ]*)
Answer \1\2\1
在第一步中,find尝试匹配完整的答案块并在\1
中捕获它。替换在块之后添加一行。
第二步尝试(对于每个块)捕获从第一个(+1p)
到Answer:
的行。该查询是(+1p)
不 cpatured。答案的答案字符在\ 1中被捕获,以下答案直到在\ 2中捕获Answer:
行并且我们追加答案字符 ' \ 1'回答:'线。 (只需做一些发现,看看匹配的内容,然后做一些替换,看看它如何与具有几个标记答案的块一起工作。你可以撤消重播替换。)
答案 1 :(得分:1)
有时候一个问题让你感到震惊(也就是这可以某种方式完成 ...)
截至目前,您可能已经得出结论,对于像Notepad ++这样的编辑器来说这不是一件容易的事(如果不是根本不可能的话),所以我想到了一种编程语言的解决方案(在我的例子中PHP
在正则表达式的帮助下)并希望在此处呈现:
代码基本上做的是以下步骤:
(+1p)
)Answer: ...
)的位置可以通过以下等式计算:(original offset) + strlen(original string) + strlen(answer_string)
<?php
$string = 'your original string here';
$regex_questions = '~(?ms)(?:^$\R)(?P<answers>(?:^\d\. Answer [A-E].*?\R)+?)(?:^$\R)(?-ms)~';
# does what is described in point 1.)
preg_match_all($regex_questions, $string, $questions, PREG_OFFSET_CAPTURE);
$regex_answers = '~(?m)^(?:\d\. Answer (?<choice>[A-E]).*?\(\+1p\))$~';
# point 2.)
$offset = 0;
# loops over the questions
foreach ($questions["answers"] as $question) {
preg_match_all($regex_answers, $question[0], $answers);
$answer = "Answer: " . implode(',', $answers["choice"]) ."\n";
# point 3.)
$position = $offset + $question[1] + strlen($question[0]);
# point 4.)
$string = substr_replace($string, $answer, $position, 0);
$offset += strlen($answer);
}
echo $string;
# After every code block there's a string with the appropiate answers
?>