作者godspeedlee (妳,我可以)
看板RegExp
標題Re: [問題] 關於單選題問卷 該如何處裡
時間Wed Aug 10 14:29:07 2011
※ 引述《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
: 這個題目跟一次解決或分次解決沒有關係
: 重點在於有複數個*的無效狀況無法排除
當然沒有關係,只是比較好作而已 ^_^"
--
http://godspeedlee.myweb.hinet.net/
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.80.129.105
※ 編輯: godspeedlee 來自: 111.80.129.105 (08/10 14:42)
※ 編輯: godspeedlee 來自: 111.80.129.105 (08/10 14:47)
1F:→ godspeedlee:以上 pattern .NET ok,其他語言需要修改 08/10 14:53
2F:→ PurpleCrow:可不可行用RegexBuddy測測不就知道了?答案是不可行 08/10 16:14
3F:→ PurpleCrow:chrisdar後來所提出的式子可一次,結果和你的分次一樣 08/10 16:18
4F:→ PurpleCrow:(?<=\(Q(\d+)\).*?)\((\d+)\)\[\*\] 08/10 16:18
5F:→ PurpleCrow:重點還是在於有複數個*的無效狀況無法排除 08/10 16:19
6F:→ PurpleCrow:原po想解決的: 08/10 16:22
7F:→ PurpleCrow:1. Q2 因為沒有作答 導致把 Q3 的答案帶到 Q2 去(pass) 08/10 16:22
8F:→ PurpleCrow:2. Q3 重複作答也無法排除 (待解決) 08/10 16:23
9F:→ godspeedlee:看來不給張圖沒說服力 08/10 16:51
12F:→ PurpleCrow:阿,抱歉看錯了,很長(非常不推薦)那串是ok的 08/10 17:01
14F:→ godspeedlee:忘了提得把(Q#)...拿掉 08/10 17:07
15F:→ godspeedlee:可以將pattern1改為 08/10 17:14
16F:→ godspeedlee:(?<=\(Q\d+\))(?:[\s\w]+)(.*?)(?=\(Q\d+\)|\s*$) 08/10 17:15
18F:→ PurpleCrow:恩,原理一樣的,[*]出現一次,前後用[ ]來填 08/10 18:10
19F:→ PurpleCrow:不過(非常不推薦)那串實在太長了,雖說是你的風格 08/10 18:11
20F:→ PurpleCrow:不過令人很難看懂 08/10 18:12
21F:→ PurpleCrow:用[^\*]可以省事很多 08/10 18:20
22F:→ godspeedlee:難懂最大的問題不是長度,而是全縮成一行了 08/10 20:13
23F:→ godspeedlee:教你一個方法,用Free-spacing mode 08/10 20:21
25F:→ godspeedlee:這種事也沒什麼對錯,大家各自對於應該要辨識的東西 08/10 20:23
26F:→ godspeedlee:認知不一樣 08/10 20:23
27F:→ godspeedlee:長短自然有所不同 08/10 20:23
28F:→ godspeedlee:照你的方式縮短: 08/10 20:32
29F:→ godspeedlee:(Q\d+\))[^*]*?(\(\d\))\[\*\][^*]*?(?=\(Q|\s*$) 08/10 20:32
30F:→ godspeedlee:group1是題號,group2是選擇的答案 08/10 20:33
31F:→ godspeedlee:當然也許你可以更短,也歡迎切磋 08/10 20:34
32F:→ godspeedlee:再短一點: 08/10 20:39
33F:→ godspeedlee:(Q\d+\))[^*]*?(\(\d\))\[\*[^*]*?(?=\(Q|\s*$) 08/10 20:39
34F:→ godspeedlee:短還要更短: 08/10 20:43
35F:→ godspeedlee:(Q\d+\))[^*]*?(\d\))\[\*[^*]*?(?=\(Q|\s*$) 08/10 20:44
36F:→ PurpleCrow:我沒有說誰對誰錯,只是說太長會難懂(特別是初學者) 08/10 22:02
37F:→ PurpleCrow:不是每個人都有RegexBuddy,不過這張圖就很好 08/10 22:03
38F:→ PurpleCrow:可以告訴問題者是怎麼得到解答,而不是直接給予解答 08/10 22:03
39F:→ PurpleCrow:縮到這樣就差不多了,我的極限是36個字元兩種型式 08/10 22:06
40F:→ PurpleCrow:(1)g1=Q1,g2=3 (2)g1=(3)[*] Answer 3 for Question 1 08/10 22:08
41F:→ godspeedlee:你的立意很好,但是: 08/10 22:28
42F:→ godspeedlee:1.有多少人是初學者? 08/10 22:28
43F:→ godspeedlee:2.有多少人是真的想學還是想直接拿答案去套套看? 08/10 22:28
44F:→ godspeedlee:P.S身為BBS上一個免費的答案提供者,還要考慮到 08/10 22:29
45F:→ godspeedlee:其他鄉民的學習能力跟意願..會不會太...= =" 08/10 22:29
46F:→ PurpleCrow:我反問你 08/10 22:29
47F:→ PurpleCrow:1.有多少人不是初學者? 08/10 22:29
48F:→ PurpleCrow:2.有多少人是真的想學而不是想直接拿答案去套套看? 08/10 22:30
49F:→ godspeedlee:不知道,我也不想預設立場 08/10 22:31
50F:→ PurpleCrow:你想炫技你的簽名檔有網址,那個判斷數字區間的確不錯 08/10 22:31
51F:→ godspeedlee:更何況我連板主都不是,我也不住海邊 08/10 22:31
52F:→ PurpleCrow:你直接解答等於剝奪別人思考的權利 08/10 22:32
53F:→ PurpleCrow:當然你要怎麼做是你的自由,而我習慣先提示 08/10 22:33
54F:→ godspeedlee:用這麼高的道德標準會不會太誇張了? 08/10 22:33
55F:→ PurpleCrow:真的不想花時間或想不出來我再給他,一樣達到助人的目的 08/10 22:34
56F:→ PurpleCrow:不過你總是太急,一開始的解答不是不符題意就是有瑕疵 08/10 22:35
57F:→ godspeedlee:同樣一句老話:請問我有收錢嗎? 08/10 22:36
58F:→ PurpleCrow:關道德什麼事?我只是敘述一個狀態.也說過那是你的自由 08/10 22:36
59F:→ godspeedlee:寫錯可以糾正我,但是我有我作法的自由,我也不會去 08/10 22:37
60F:→ godspeedlee:批評別人 08/10 22:37
61F:→ PurpleCrow:你是看不懂中文還是..?我沒說你不對,何來批評? 08/10 22:42
62F:→ PurpleCrow:我只是敘述一個狀態.也說過那是你的自由..很白話吧? 08/10 22:42
63F:→ godspeedlee:說我剝奪別人思考機會這不是批評難道是?? 08/10 22:43
64F:→ PurpleCrow:狀態:直接解答等於剝奪別人思考的權利...有錯嗎? 08/10 22:44
65F:→ PurpleCrow:我有說這樣不對嗎?也說了那是你的自由..別再跳針ok? 08/10 22:44
66F:→ godspeedlee:大哥,你可以說我寫的長,效率差,但是批評我 08/10 22:45
67F:→ godspeedlee:剝奪別人思考機會這就太超過了 08/10 22:45
68F:→ PurpleCrow:寫的長是事實,效率好像有專門的軟題看我無法評論 08/10 22:47
69F:→ PurpleCrow:我再強調一次,我只敘述一個狀態:做了A等於B 08/10 22:48
70F:→ PurpleCrow:我如果說這個狀態真是過份,不道德那才叫批評 08/10 22:49
71F:→ godspeedlee:說是我的自由,那就請把您說我剝奪別人思考這句話 08/10 22:51
72F:→ godspeedlee:收回(雖然你覺得沒什麼),就像我也從來只針對 08/10 22:51
73F:→ godspeedlee:pattern的寫法回應,不會去批評別人的文章有沒有 08/10 22:51
74F:→ godspeedlee:教育意義(再提一次,我不是板主,也沒收錢 08/10 22:51
75F:→ godspeedlee:您要不要拿這套標準去別的版推文看看?) 08/10 22:51
76F:→ PurpleCrow:ok,ok既然你那麼在意,那我收回 08/10 22:52
77F:→ godspeedlee:是狀態還是批評不是你說了算 08/10 22:53
78F:→ PurpleCrow:就當問問題的人都是只想伸手要解答 08/10 22:53
79F:→ godspeedlee:抱歉,我也有點激動,畢竟這樣回應很少見 08/10 22:57
80F:→ godspeedlee:通常大家只會反應你的答案是錯的 :P 08/10 22:58
81F:→ PurpleCrow:直接解答反而是最好的,而我的做法很可能會被認為是故做 08/10 22:58
82F:→ PurpleCrow:神秘,浪費它們的時間 08/10 22:58
83F:→ PurpleCrow: 他 08/10 22:59
84F:→ godspeedlee:我不是沒有想過要多寫一些教學跟解釋,問題是我不知道 08/11 00:30
85F:→ godspeedlee:要寫到多少才算夠(不知道大家平均程度,所以不如不寫) 08/11 00:31
86F:→ godspeedlee:再說,自從看了兩遍Mastering Regular Expression 08/11 00:31
87F:→ godspeedlee:我發現自己不可能解釋的比他更好(不只有圖解,甚至還 08/11 00:32
88F:→ godspeedlee:算出來某些pattern需要比對幾次) 08/11 00:32
89F:→ godspeedlee:題外話:建議板主規定發問時必須提供使用的 08/11 00:41
90F:→ godspeedlee:程式語言或工具,因為各家對regex支援程度不一 08/11 00:41
91F:→ badwork:收到.. 08/11 00:46
92F:→ godspeedlee:這大概創下ptt冷門板推文最長紀錄了..囧 08/11 00:48