※ 引述《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
: 這個題目跟一次解決或分次解決沒有關係
: 重點在於有複數個*的無效狀況無法排除
當然沒有關係,只是比較好作而已 ^_^"