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

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

Links booklink

Contact Us: admin [ a t ] ucptt.com