Re: [問題] 關於單選題問卷 該如何處裡

看板RegExp (正規表示式 Regular Expression)作者 (妳,我可以)時間13年前 (2011/08/10 14:29), 編輯推噓0(0092)
留言92則, 3人參與, 最新討論串4/5 (看更多)
※ 引述《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)

08/10 14:53, , 1F
以上 pattern .NET ok,其他語言需要修改
08/10 14:53, 1F

08/10 16:14, , 2F
可不可行用RegexBuddy測測不就知道了?答案是不可行
08/10 16:14, 2F

08/10 16:18, , 3F
chrisdar後來所提出的式子可一次,結果和你的分次一樣
08/10 16:18, 3F

08/10 16:18, , 4F
(?<=\(Q(\d+)\).*?)\((\d+)\)\[\*\]
08/10 16:18, 4F

08/10 16:19, , 5F
重點還是在於有複數個*的無效狀況無法排除
08/10 16:19, 5F

08/10 16:22, , 6F
原po想解決的:
08/10 16:22, 6F

08/10 16:22, , 7F
1. Q2 因為沒有作答 導致把 Q3 的答案帶到 Q2 去(pass)
08/10 16:22, 7F

08/10 16:23, , 8F
2. Q3 重複作答也無法排除 (待解決)
08/10 16:23, 8F

08/10 16:51, , 9F
看來不給張圖沒說服力
08/10 16:51, 9F

08/10 16:51, , 10F


08/10 17:01, , 12F
阿,抱歉看錯了,很長(非常不推薦)那串是ok的
08/10 17:01, 12F


08/10 17:07, , 14F
忘了提得把(Q#)...拿掉
08/10 17:07, 14F

08/10 17:14, , 15F
可以將pattern1改為
08/10 17:14, 15F

08/10 17:15, , 16F
(?<=\(Q\d+\))(?:[\s\w]+)(.*?)(?=\(Q\d+\)|\s*$)
08/10 17:15, 16F


08/10 18:10, , 18F
恩,原理一樣的,[*]出現一次,前後用[ ]來填
08/10 18:10, 18F

08/10 18:11, , 19F
不過(非常不推薦)那串實在太長了,雖說是你的風格
08/10 18:11, 19F

08/10 18:12, , 20F
不過令人很難看懂
08/10 18:12, 20F

08/10 18:20, , 21F
用[^\*]可以省事很多
08/10 18:20, 21F

08/10 20:13, , 22F
難懂最大的問題不是長度,而是全縮成一行了
08/10 20:13, 22F

08/10 20:21, , 23F
教你一個方法,用Free-spacing mode
08/10 20:21, 23F


08/10 20:23, , 25F
這種事也沒什麼對錯,大家各自對於應該要辨識的東西
08/10 20:23, 25F

08/10 20:23, , 26F
認知不一樣
08/10 20:23, 26F

08/10 20:23, , 27F
長短自然有所不同
08/10 20:23, 27F

08/10 20:32, , 28F
照你的方式縮短:
08/10 20:32, 28F

08/10 20:32, , 29F
(Q\d+\))[^*]*?(\(\d\))\[\*\][^*]*?(?=\(Q|\s*$)
08/10 20:32, 29F

08/10 20:33, , 30F
group1是題號,group2是選擇的答案
08/10 20:33, 30F

08/10 20:34, , 31F
當然也許你可以更短,也歡迎切磋
08/10 20:34, 31F

08/10 20:39, , 32F
再短一點:
08/10 20:39, 32F

08/10 20:39, , 33F
(Q\d+\))[^*]*?(\(\d\))\[\*[^*]*?(?=\(Q|\s*$)
08/10 20:39, 33F

08/10 20:43, , 34F
短還要更短:
08/10 20:43, 34F

08/10 20:44, , 35F
(Q\d+\))[^*]*?(\d\))\[\*[^*]*?(?=\(Q|\s*$)
08/10 20:44, 35F

08/10 22:02, , 36F
我沒有說誰對誰錯,只是說太長會難懂(特別是初學者)
08/10 22:02, 36F

08/10 22:03, , 37F
不是每個人都有RegexBuddy,不過這張圖就很好
08/10 22:03, 37F

08/10 22:03, , 38F
可以告訴問題者是怎麼得到解答,而不是直接給予解答
08/10 22:03, 38F

08/10 22:06, , 39F
縮到這樣就差不多了,我的極限是36個字元兩種型式
08/10 22:06, 39F

08/10 22:08, , 40F
(1)g1=Q1,g2=3 (2)g1=(3)[*] Answer 3 for Question 1
08/10 22:08, 40F

08/10 22:28, , 41F
你的立意很好,但是:
08/10 22:28, 41F

08/10 22:28, , 42F
1.有多少人是初學者?
08/10 22:28, 42F

08/10 22:28, , 43F
2.有多少人是真的想學還是想直接拿答案去套套看?
08/10 22:28, 43F

08/10 22:29, , 44F
P.S身為BBS上一個免費的答案提供者,還要考慮到
08/10 22:29, 44F

08/10 22:29, , 45F
其他鄉民的學習能力跟意願..會不會太...= ="
08/10 22:29, 45F

08/10 22:29, , 46F
我反問你
08/10 22:29, 46F

08/10 22:29, , 47F
1.有多少人不是初學者?
08/10 22:29, 47F

08/10 22:30, , 48F
2.有多少人是真的想學而不是想直接拿答案去套套看?
08/10 22:30, 48F

08/10 22:31, , 49F
不知道,我也不想預設立場
08/10 22:31, 49F

08/10 22:31, , 50F
你想炫技你的簽名檔有網址,那個判斷數字區間的確不錯
08/10 22:31, 50F

08/10 22:31, , 51F
更何況我連板主都不是,我也不住海邊
08/10 22:31, 51F

08/10 22:32, , 52F
你直接解答等於剝奪別人思考的權利
08/10 22:32, 52F

08/10 22:33, , 53F
當然你要怎麼做是你的自由,而我習慣先提示
08/10 22:33, 53F

08/10 22:33, , 54F
用這麼高的道德標準會不會太誇張了?
08/10 22:33, 54F

08/10 22:34, , 55F
真的不想花時間或想不出來我再給他,一樣達到助人的目的
08/10 22:34, 55F

08/10 22:35, , 56F
不過你總是太急,一開始的解答不是不符題意就是有瑕疵
08/10 22:35, 56F

08/10 22:36, , 57F
同樣一句老話:請問我有收錢嗎?
08/10 22:36, 57F

08/10 22:36, , 58F
關道德什麼事?我只是敘述一個狀態.也說過那是你的自由
08/10 22:36, 58F

08/10 22:37, , 59F
寫錯可以糾正我,但是我有我作法的自由,我也不會去
08/10 22:37, 59F

08/10 22:37, , 60F
批評別人
08/10 22:37, 60F

08/10 22:42, , 61F
你是看不懂中文還是..?我沒說你不對,何來批評?
08/10 22:42, 61F

08/10 22:42, , 62F
我只是敘述一個狀態.也說過那是你的自由..很白話吧?
08/10 22:42, 62F

08/10 22:43, , 63F
說我剝奪別人思考機會這不是批評難道是??
08/10 22:43, 63F

08/10 22:44, , 64F
狀態:直接解答等於剝奪別人思考的權利...有錯嗎?
08/10 22:44, 64F

08/10 22:44, , 65F
我有說這樣不對嗎?也說了那是你的自由..別再跳針ok?
08/10 22:44, 65F

08/10 22:45, , 66F
大哥,你可以說我寫的長,效率差,但是批評我
08/10 22:45, 66F

08/10 22:45, , 67F
剝奪別人思考機會這就太超過了
08/10 22:45, 67F

08/10 22:47, , 68F
寫的長是事實,效率好像有專門的軟題看我無法評論
08/10 22:47, 68F

08/10 22:48, , 69F
我再強調一次,我只敘述一個狀態:做了A等於B
08/10 22:48, 69F

08/10 22:49, , 70F
我如果說這個狀態真是過份,不道德那才叫批評
08/10 22:49, 70F

08/10 22:51, , 71F
說是我的自由,那就請把您說我剝奪別人思考這句話
08/10 22:51, 71F

08/10 22:51, , 72F
收回(雖然你覺得沒什麼),就像我也從來只針對
08/10 22:51, 72F

08/10 22:51, , 73F
pattern的寫法回應,不會去批評別人的文章有沒有
08/10 22:51, 73F

08/10 22:51, , 74F
教育意義(再提一次,我不是板主,也沒收錢
08/10 22:51, 74F

08/10 22:51, , 75F
您要不要拿這套標準去別的版推文看看?)
08/10 22:51, 75F

08/10 22:52, , 76F
ok,ok既然你那麼在意,那我收回
08/10 22:52, 76F

08/10 22:53, , 77F
是狀態還是批評不是你說了算
08/10 22:53, 77F

08/10 22:53, , 78F
就當問問題的人都是只想伸手要解答
08/10 22:53, 78F

08/10 22:57, , 79F
抱歉,我也有點激動,畢竟這樣回應很少見
08/10 22:57, 79F

08/10 22:58, , 80F
通常大家只會反應你的答案是錯的 :P
08/10 22:58, 80F

08/10 22:58, , 81F
直接解答反而是最好的,而我的做法很可能會被認為是故做
08/10 22:58, 81F

08/10 22:58, , 82F
神秘,浪費它們的時間
08/10 22:58, 82F

08/10 22:59, , 83F
08/10 22:59, 83F

08/11 00:30, , 84F
我不是沒有想過要多寫一些教學跟解釋,問題是我不知道
08/11 00:30, 84F

08/11 00:31, , 85F
要寫到多少才算夠(不知道大家平均程度,所以不如不寫)
08/11 00:31, 85F

08/11 00:31, , 86F
再說,自從看了兩遍Mastering Regular Expression
08/11 00:31, 86F

08/11 00:32, , 87F
我發現自己不可能解釋的比他更好(不只有圖解,甚至還
08/11 00:32, 87F

08/11 00:32, , 88F
算出來某些pattern需要比對幾次)
08/11 00:32, 88F

08/11 00:41, , 89F
題外話:建議板主規定發問時必須提供使用的
08/11 00:41, 89F

08/11 00:41, , 90F
程式語言或工具,因為各家對regex支援程度不一
08/11 00:41, 90F

08/11 00:46, , 91F
收到..
08/11 00:46, 91F

08/11 00:48, , 92F
這大概創下ptt冷門板推文最長紀錄了..囧
08/11 00:48, 92F
文章代碼(AID): #1EGYKtIQ (RegExp)
文章代碼(AID): #1EGYKtIQ (RegExp)