2011-11-25 79 views
0

我需要解析值超出文本看起来像这样的:使用RegEx解析文本?

Description. Question? 
A. First Answer 
B. Second Answer 
C. Third Answer 

Answer: A, B 

现在我需要找出描述的问题,问题的答案,这答案是正确的。 RegEx有可能吗?我知道这应该是可能的,但我不是RegEx Expert。

回答

3

认真的Regex是伟大的,但一旦解析逻辑变得先进,正则表达式也需要解决这个问题。我建议把逻辑分成小块(我认为你有某种脚本语言可用来做一些预处理?)

即使你得到了与一个杀手正则表达式匹配的整个事情 - 稍后改变它(由你或者其他一些抱歉的人)会是一种痛苦。

我会配合这样的答案(你需要剥离逗号):

^Answer: (\w,?)+ 

然后我会做的逻辑来重新分析和与第一正则表达式找到答案文本,像这样的东西(重建了比赛,在这种情况下,A是一个答案):

^A\.\s(.*) 

这也许不是什么与闪烁你的朋友,但它会更容易维护,而且赫克容易得多了解。

+0

”^ A \。\ s(。*)“效果很好,谢谢!但我有一个问题。我有一些答案与换行符。我如何匹配整个答案而不匹配下一个答案? –

+0

哦,“^ A \。\ s([^ B] *)”这个工作! –

+0

啊,不,它不... –

0

几乎任何你可能想要用正则表达式解析文本都可能想做的事情,但你必须投入一些时间来学习它。你的特定任务有多棘手取决于你的文本体是如何一致的。所以简而言之,是的,但不要问我的Reg Ex!祝你好运。

+0

”投入一些时间来学习它虽然“,唯一的问题是,我没有时间;) –

0

如果你可以对你的例子更具体,并显示一个实际的问题和描述,它会更容易说清楚,但如果我正在阅读这个权利,你可以找到所有的文本到最后一个句号“ “。在问号“?”之前,然后找到问号后面的文字,直到问号“?”,最后使用满员的字母“。”。之后他们的权利,所以像这样的伪:

lastFullStopBeforeQ = text.substring(0至第一个问题 标记).lastIndexOf

说明= text.substring(0至lastFullStopBeforeQ)( “”)

问题= text.substring(lastFullStopBeforeQ + 1到第一个问题 标记)

答案[0] = text.substring(第一问号+ 1到下一个 “\ n”)...

CorrectAnswers [0] = text.substring(旁边指数 “答:” 到明年 “”)...

我知道这是可能使用C#,如果你用别的话我可以给你一个明确的答案。 “