转换考试题库方法请教

有一套题库,想转换成exam vce能导入的格式,请教能否帮写段elisp代码或如何操作?

原题举例:

  1. 以下属于一线城市的有是(AB).多选题

A.北京

B.上海

C.武汉

希望转成:

  1. 以下属于一线城市的有是().多选题

A.北京

B.上海

C.武汉

Answer:AB

也就是将小括号()里面的答案提取出来,再写到本题最后或下一题前面。

可以参考 这篇文章

谢谢。经过一摸索,终于解决个大概,早上弄时少了save-match-data,结果插入内容时影响了match结果,导致第2题起插入些乱的内容,最后一题手动弄下:

(defun trans-vce ()
  (interactive)
  (let ((n 0)
        (ans))
    (goto-char (point-min))
    (while (re-search-forward "\\(^[0-9]+\\.\\)[^(]+[()]\\([a-hA-H]+\\)[()]" nil t)
      (if (> n 0)
          (save-excursion
            (save-match-data
              (goto-char (match-beginning 0))
              (insert (format "Answer:%s \n" ans)))))
      (setq ans (match-string 2))
      (replace-match "" nil nil nil 2)
      (setq n (1+ n)))))

如果比较有规律的话,录制一个宏好像都能解决了。
思路:C-s 搜索(,M-D 删除括号内的内容,然后C-s往下搜索C,找到以后C-n 往下走一行,输入Answer:,C-y粘贴上面删除的内容。 以此重复。

请问这是什么意思,到这里不明白了。到这应该要找到下一题开头也就是1. 2. 3.之类的

就是再按C-s 往前搜索最后一行特有的内容,我这里假设你最后一行是C。具体要看你的文件是什么规律。

特征是每题开头都是1. 2. 之类的,数字(有多位数)和点

我这里只能给你一个思路,具体还得你去操作试试看。这类问题,论坛之前有讨论过,你可以搜索一下。或者可以参考我之前整理的这个文章,里面多种方法都可以实现,我觉得宏是比较简单的方法。

我简单测试了一下,宏是可行的。