※ 引述《PurpleCrow (紫乌鸦)》之铭言:
: ※ 引述《godspeedlee (妳,我可以)》之铭言:
: : 分成两次来作比较轻松:
: : 第一步: 将每个 Question 切割成单独的区块
: : \(Q\d+\)[\s\w]+(\(\d+\)\[[\s*]\][\s\w]+)+
: : 或
: : (?<=\(Q\d+\))(.*?)(?=\(Q\d+\))
: 这个式子会漏掉
: (Q4) Question 4
: (1)[*] Answer 1 for Question 4
: (2)[ ] Answer 2 for Question 4
: (3)[ ] Answer 3 for Question 4
: (4)[ ] Answer 4 for Question 4
谢谢,修正如下:
(?<=\(Q\d+\))(.*?)(?=\(Q\d+\)|\s*$)
: : 第二步: 对每个区块个别进行搜寻
: : \(\d+\)\[\*\][\s\w]+
: (Q3) Question 3 依然无法排除 得
: (1)[*] Answer 1 for Question 3
: (3)[*] Answer 3 for Question 3
抱歉没讲清楚
我的意思是先切割成个别的问题(pattern1),然后再个
别去比对每个(Q#)里面的答案(pattern2),假如成功比
对两次(含)以上,那就是代表重复作答。
所以光靠 pattern2 没办法判断出是否重复作答(抱歉
让大家误以为有这个意思)
假如要 pattern2 不用另外写code去统计次数,下面这个 pattern
"也许"可行(不推荐):
^(?:\(\d\)\[\s*\][\s\w]+)*(\(\d\)\[\*\][\s\w]+)(?:\(\d\)\[\s*\][\s\w]+)*$
更变态一点,跟 pattern1 合体:
(非常不推荐)
\(Q\d+\)[\s\w]+(?:\(\d\)\[\s*\][\s\w]+)*(\(\d\)\[\*\][\s\w]+)(?:\(\d\)\[\s*\][\s\w]+)*(?=\(Q\d|$)
(无从得知重复作答跟没有作答是哪些题目)
: : 当然,使用 regexp 常常会有一种冲动想一次解决 :P
: 这个题目跟一次解决或分次解决没有关系
: 重点在于有复数个*的无效状况无法排除
当然没有关系,只是比较好作而已 ^_^"