2011-11-25 56 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#,如果你用別的話我可以給你一個明確的答案。 「