使用RegEx解析文本?

时间:2011-11-25 07:28:58

标签: c# .net regex

我需要从看起来像这样的文本中解析值:

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

Answer: A, B

现在我需要找出说明,问题,答案和哪些答案是正确的。这可能与RegEx有关吗?我知道它应该是可能的,但我不是RegEx专家。

3 个答案:

答案 0 :(得分:3)

严重的是Regex很棒,但是一旦解析逻辑变得先进,解决问题所需的正则表达式也是如此。我建议将逻辑拆分成更小的部分(我认为你可以使用某种脚本语言进行一些预处理?)

即使你把整个东西与一个杀手正则表达式相匹配 - 稍后改变它(由你或其他一些对不起的人)也会很痛苦。

我会用这样的答案来匹配答案(你需要删除逗号):

^Answer: (\w,?)+

然后我会使用第一个正则表达式找到的答案重新解析文本的逻辑,就像这样(重建匹配,在这种情况下A是答案):

^A\.\s(.*)

这可能不是闪现朋友的东西,但它会更容易维护,而且更容易理解。

答案 1 :(得分:0)

使用正则表达式可以解决任何您可能想要解析文本的问题,但您必须花一些时间来学习它。您的特定任务有多棘手取决于您的文本主体的一致性。所以简而言之,是的,但不要问我的Reg Ex!祝你好运。

答案 2 :(得分:0)

如果你对你的例子更具体,并且显示一个实际的问题和描述,那么肯定会更容易说出来,但如果我正确地阅读,你可以找到所有文本到最后一个句号“。 “在问号“?”之前,然后在问号“?”之后找到文本,最后使用带有句号的字母“。”在他们之后,所以像这样伪:

  

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

     

Description = text.substring(0 to lastFullStopBeforeQ)

     

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

     

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

     

CorrectAnswers [0] = text.substring(下一个“答案:”的下一个索引   “,”)......

我知道这可以使用C#,如果你使用其他东西,那么我无法给你一个明确的答案。