2011-06-22 26 views
1

我有一些字符串像這樣,

\ r \ n21.what是你最喜歡的寵物 名字嗎?\ r \ nA.Cat B.Dog \ r \ nC.Horse D.Snake \ r \ n22.哪個國家生產 小麥最多?\ r \ nA.Australia B.Bhutan \ r \ nC.India D.Canada。正則表達式來找到問題的字符串

=====================================

現在我有通過正則表達式從字符串中找出問題以及選擇。

任何人都可以主動。

我解析爲[1-9][.]的問題。但是我收到了兩個有時合併的問題。

任何機構都可以提出任何更改。

+0

總是有4個答案選擇? – scott

+0

[1-9] {1} [0-9]?[。]你可能需要的不止於此,但應該更好地匹配數字 – scott

+0

@scott:你不需要'{1}'。 –

回答

1
((\d+\..*?\?\\r\\n)(A\..*?)(B\..*?)(C\..*?)(D\..*?\\r\\n)) 

您可以使用此正則表達式,但它假定在最後一次選擇後有\ r \ n個字符。

+0

好的..我正在嘗試這個..你可以提供完整的符號...我正在使用C#正則表達式。 – Ashish

+0

@Ashish,我不知道c#,這個正則表達式已經過測試拉德http://www.radsoftware.com.au/?from=RegexDesigner –

0

在Python:

查找問題:

>>> import re 
>>> re.findall(r'[1-9][1-9]*\.([^?]*)',s) 
['what is your favourite pet name', 'Which country produce wheat most'] 
+0

我正在使用C#... – Ashish

0

這可以幫助:

[0-9]+\.(.*?)\?\s*A\.(.*?)\s*B\.(.*?)\s*C\.(.*?)\s*D\.(.*?)\r\n 

使用\ r \ n至DELIM問題是不是一個好主意。雖然它應該適用於你的情況。

+0

我正在使用C#。如何分配這個正則表達式進行測試。編譯器發生錯誤。 – Ashish

+0

@Ashish如果你顯示什麼編譯器顯示它可以提供幫助。我在這個正則表達式中看不到任何錯誤,我沒有使用C#的正則表達式,但這是非常基本的東西。 – Thresh

1

我已經創建了兩個可能的正則表達式,具體取決於您希望問題/答案的數字/字母是否出現在捕獲中。

Pattern1: (?<Question>\d+\.[^?]+\?)(?:(?:\W*)(?<Answer>[ABCD]\..*?(?=$|(?:\s|\r\n)(?:[ABCD]\.|\d+\.))))* 
Pattern2: \d+\.(?<Question>[^?]+\?)(?:(?:\W*)[ABCD]\.(?<Answer>.*?(?=$|(?:\s|\r\n)(?:[ABCD]\.|\d+\.))))* 

我假設你在C#想這一點,因爲你標記它爲C#,所以這裏是一些示例代碼可以粘貼到一個新的控制檯應用程序以開始播放:

 var input = "\r\n21.what is your favourite pet name?\r\nA.Cat B.Dog\r\nC.Horse D.Snake\r\n22.Which country produce wheat most?\r\nA.Australia B.Bhutan\r\nC.India D.Canada."; 
     var pattern1 = @"(?<Question>\d+\.[^?]+\?)(?:(?:\W*)(?<Answer>[ABCD]\..*?(?=$|(?:\s|\r\n)(?:[ABCD]\.|\d+\.))))*"; 
     var pattern2 = @"\d+\.(?<Question>[^?]+\?)(?:(?:\W*)[ABCD]\.(?<Answer>.*?(?=$|(?:\s|\r\n)(?:[ABCD]\.|\d+\.))))*"; 
     foreach (Match m in Regex.Matches(input, pattern2)) 
     { 
      var question = m.Groups["Question"].Value; 
      var answers = (from Capture cap in m.Groups["Answer"].Captures 
          select cap.Value).ToList(); 

      Console.WriteLine("Question: {0}", question); 
      foreach (var answer in answers) 
      { 
       Console.WriteLine("Answer: {0}", answer); 
      } 
     } 
     Console.ReadLine(); 

它使用正則表達式模式將每個問題解析爲問題變量,並將相關答案解析爲答案列表。您可以通過更改發送給第一個foreach中的Regex.Matches()函數的模式來更改使用哪種模式。

+0

非常感謝Ondrej。它努力找到我的問題完美。但答案仍然不是解析。我想這可能會幫助你看到我的情況。這是我的字符串 – Ashish

+0

後面的「\ r \ n」的問題沒有。是(。)。在「?\ r \ n k」之後。是選項no。 「Sup」是超劇本。我們現在不考慮這一點。 – Ashish

0

我不知道這是否會在孟加拉工作,但下面的代碼工作OK英語(至少在你提供的示例;)):

var input = "\r\n21.what is your favourite pet name?\r\nA.Cat B.Dog\r\nC.Horse D.Snake\r\n22.Which country produce wheat most?\r\nA.Australia B.Bhutan\r\nC.India D.Canada."; 

var regex = new Regex(@"(?<number>[0-9]+)\.(?<question>.+\?)\W+((?<letter>[A-Z])\.(?<answer>\w+)\W*)+"); 

foreach (Match question in regex.Matches(input)) 
{ 
    Console.Write("{0}. ", question.Groups["number"].Captures[0]); 
    Console.WriteLine(question.Groups["question"].Captures[0]); 

    foreach (Capture answer in question.Groups["answer"].Captures) 
    { 
     Console.WriteLine(answer.Value); 
    } 
} 

它打印:

21. what is your favourite pet name? 
Cat 
Dog 
Horse 
Snake 
22. Which country produce wheat most? 
Australia 
Bhutan 
India 
Canada 

我想你可以從那裏得到你需要的東西。

+0

這裏是英文的文字。它不解析。 「\ r \ nPage-1 \ r \ n8。南極洲的水溫是多少?\ r \ n A.- 273 K B. 273 K C. 373 K D. K \ r \ n9。 A.紅色,藍色,綠色B.白色,黃色,綠色\ r \nüC. reg,灰色,黃色D.白色和粉紅色\ r \ n10。什麼是水的比熱? r \ñA. 400 JKG -1ķ-1 B. 800 JKG -1ķ-1 \ r \ n C. 4000 JKG -1 UD。4200 JKG -1ķ電阻的單位是什麼?\ r \ n A. Ohom B. Volt \ r \ n C.焦耳D. Kelvin \ r \ n「; – Ashish

+0

嗯...是的,的確,輸入改變了很多...我注意到現在有一​​個頁面的概念,應該如何處理?關於答案是如何分開的,是否有規定?它似乎是非常隨機的(有時候有空格,有時候換行,有時甚至沒有......)字符串中還有一些奇怪的'ü'字符,這些是正常的嗎? – madd0

相關問題