2016-03-24 11 views
1

私は数日間この質問にぶつかってきました。C# - RegEx - 2行の間で文字列を取得

質問: 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"は、プロセッサ名"Groups [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とあなたのアドバイスを辿り、私はデータを引き出すことができます!私が直面している唯一の問題は、すべてのマッチの代わりに1つのマッチをつかむことだけです。今それを理解しようとしています。 – Nodfox