※ 引述《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
: 这个题目跟一次解决或分次解决没有关系
: 重点在于有复数个*的无效状况无法排除
当然没有关系,只是比较好作而已 ^_^"
以上 pattern .NET ok,其他语言需要修改
可不可行用RegexBuddy测测不就知道了?答案是不可行chrisdar后来所提出的式子可一次,结果和你的分次一样(?<=\(Q(\d+)\).*?)\((\d+)\)\[\*\]重点还是在于有复数个*的无效状况无法排除原po想解决的:1. Q2 因为没有作答 导致把 Q3 的答案带到 Q2 去(pass)2. Q3 重复作答也无法排除 (待解决)
看来不给张图没说服力
![]()
/" target="_blank" rel="nofollow">
![]()
/
![]()
/" target="_blank" rel="nofollow">
![]()
/
![]()
/" target="_blank" rel="nofollow">
![]()
/忘了提得把(Q#)...拿掉可以将pattern1改为(?<=\(Q\d+\))(?:[\s\w]+)(.*?)(?=\(Q\d+\)|\s*$)
![]()
/" target="_blank" rel="nofollow">
![]()
/
恩,原理一样的,[*]出现一次,前后用[ ]来填不过(非常不推荐)那串实在太长了,虽说是你的风格不过令人很难看懂用[^\*]可以省事很多
难懂最大的问题不是长度,而是全缩成一行了教你一个方法,用Free-spacing mode
![]()
/" target="_blank" rel="nofollow">
![]()
/这种事也没什么对错,大家各自对于应该要辨识的东西认知不一样长短自然有所不同照你的方式缩短:(Q\d+\))[^*]*?(\(\d\))\[\*\][^*]*?(?=\(Q|\s*$)group1是题号,group2是选择的答案当然也许你可以更短,也欢迎切磋再短一点:(Q\d+\))[^*]*?(\(\d\))\[\*[^*]*?(?=\(Q|\s*$)短还要更短:(Q\d+\))[^*]*?(\d\))\[\*[^*]*?(?=\(Q|\s*$)
我没有说谁对谁错,只是说太长会难懂(特别是初学者)不是每个人都有RegexBuddy,不过这张图就很好可以告诉问题者是怎么得到解答,而不是直接给予解答缩到这样就差不多了,我的极限是36个字符两种型式(1)g1=Q1,g2=3 (2)g1=(3)[*] Answer 3 for Question 1
你的立意很好,但是:1.有多少人是初学者?2.有多少人是真的想学还是想直接拿答案去套套看?P.S身为BBS上一个免费的答案提供者,还要考虑到其他乡民的学习能力跟意愿..会不会太...= ="
我反问你1.有多少人不是初学者?2.有多少人是真的想学而不是想直接拿答案去套套看?
你想炫技你的签名档有网址,那个判断数字区间的确不错
你直接解答等于剥夺别人思考的权利当然你要怎么做是你的自由,而我习惯先提示
真的不想花时间或想不出来我再给他,一样达到助人的目的不过你总是太急,一开始的解答不是不符题意就是有瑕疵
关道德什么事?我只是叙述一个状态.也说过那是你的自由
写错可以纠正我,但是我有我作法的自由,我也不会去批评别人
你是看不懂中文还是..?我没说你不对,何来批评?我只是叙述一个状态.也说过那是你的自由..很白话吧?
状态:直接解答等于剥夺别人思考的权利...有错吗?我有说这样不对吗?也说了那是你的自由..别再跳针ok?
大哥,你可以说我写的长,效率差,但是批评我剥夺别人思考机会这就太超过了
写的长是事实,效率好像有专门的软题看我无法评论我再强调一次,我只叙述一个状态:做了A等于B我如果说这个状态真是过份,不道德那才叫批评
说是我的自由,那就请把您说我剥夺别人思考这句话收回(虽然你觉得没什么),就像我也从来只针对pattern的写法回应,不会去批评别人的文章有没有教育意义(再提一次,我不是板主,也没收钱您要不要拿这套标准去别的版推文看看?)
抱歉,我也有点激动,毕竟这样回应很少见通常大家只会反应你的答案是错的 :P
直接解答反而是最好的,而我的做法很可能会被认为是故做神秘,浪费它们的时间他
我不是没有想过要多写一些教学跟解释,问题是我不知道要写到多少才算够(不知道大家平均程度,所以不如不写)再说,自从看了两遍Mastering Regular Expression我发现自己不可能解释的比他更好(不只有图解,甚至还算出来某些pattern需要比对几次)题外话:建议板主规定发问时必须提供使用的程式语言或工具,因为各家对regex支援程度不一
作者: badwork (我是大笨蛋) 2011-08-11 00:46:00
收到..