2016-03-24 146 views
1

我一直在與這個問題奮鬥了幾天。C# - 正則表達式 - 獲取兩行之間的字符串

問題:如何在C#中的兩行之間抽取符合我搜索條件的多個字符串?

這裏是我當前的進程:

  1. 讀取文件的所有行。

    text_file = "C:\test.txt"; 
    string[] file_text = File.ReadAllLines(text_file); 
    
  2. 循環遍歷文件的每一行和搜索匹配

    foreach (string line in file_text) 
    { 
        Regex r1 = new Regex(@"Processor\(s\):\s+.+\n\s+(.+)\nBIOS Version:"); 
    
        Match match1 = r1.Match(line); 
    
        if (match1.Success) 
        { 
         string processor = match1.Groups[1].Value; 
         // Just to see if I matched anything 
         System.Windows.MessageBox.Show(processor); 
        } 
    } 
    
  3. 下面是示例文本:

    Processor(s):    1 Processor(s) Installed. 
              [01]: Intel64 Family 6 Model 23 Stepping 10 GenuineIntel ~2826 Mhz 
    BIOS Version:    Phoenix Technologies LTD 6.00, 7/30/2013 
    

問題:我用網站「RegExr」和「Regex101」顯示處理器名稱應該在「組[1]」中捕獲,但是當我試圖將其轉儲到消息框時沒有捕獲任何東西。

任何意見將不勝感激!

謝謝!

+3

你讀的文件轉換成一個線陣列,並使用正則表達式來匹配多個行。這是不可能的。如果你想閱讀一個完整的文件,將它全部讀入一個變量,然後用換行符在整個文本中使用你的正則表達式。 –

回答

2

更改代碼的所有文件讀入一個字符串變量,然後運行正則表達式針對:

text_file = "C:\test.txt"; 
string file_text = File.ReadAllText(text_file); 

Regex r1 = new Regex(@"Processor\(s\):\s+.+\n\s+(.+)\nBIOS Version:"); 

Match match1 = r1.Match(file_text); 
+0

謝謝!我遵循Wiktor和您的建議,我可以提取數據!我面臨的唯一問題是它只抓取一場比賽,而不是所有的比賽。試圖找出現在。 – Nodfox

相關問題