2011-07-15 9 views
2

私が読んでいるファイルを別のリストに分割し、RichTextBoxに出力して3つの異なるリストボックスに読み込む問題があります。私は現在このすべてをやっていますが、私は修正/回避する方法がわからない何かを見つけました。C# - List3とList2の項目をList3から削除する際の問題

私のコードは以下の通りです。に一致すると正しく動作しない理由を理解できないようです。コードのtwoRegex = Regex.Match(...)セクションに一致してください。

CODE:

private void SortDataLines() 
    { 
     try 
     { 
      // Reads the lines in the file to format. 
      var fileReader = File.OpenText(openGCFile.FileName); 

      // Creates a list for the lines to be stored in. 
      var placementUserDefinedList = new List<string>(); 

      // Reads the first line and does nothing with it. 
      fileReader.ReadLine(); 

      // Adds each line in the file to the list. 
      while (true) 
      { 
       var line = fileReader.ReadLine(); 
       if (line == null) 
        break; 

       placementUserDefinedList.Add(line); 
      } 

      // Creates new lists to hold certain matches for each list. 
      var oneResult = new List<string>(); 
      var twoResult = new List<string>(); 
      var mainResult = new List<string>(); 

      foreach (var userLine in placementUserDefinedList) 
       mainResult.Add(string.Join(" ", userLine)); 

      foreach (var oneLine in mainResult) 
      { 
       // PLACEMENT ONE Regex 
       Match oneRegex = Regex.Match(oneLine, @"^.+(RES|0402|0201|0603|0805|1206|1306|1608|3216|2551" 
        + @"|1913|1313|2513|5125|2525|5619|3813|1508|6431|2512|1505|2208|1005|1010|2010|0505|0705" 
        + @"|1020|1812|2225|5764|4532|1210|0816|0363|SOT)"); 

       if (oneRegex.Success) 
        oneResult.Add(string.Join(" ", oneLine)); 
      } 

      // 
      // THIS IS THE SECTION THAT FAILS.. 
      // 
      foreach(var twoLine in mainResult) 
      { 
       //PLACEMENT TWO Regex 
       Match twoRegex = Regex.Match(twoLine, @"^.+(BGA|SOP8|QSOP|TQSOP|SOIC16|SOIC12|SOIC8|SO8|SO08" 
        + @"CQFP|LCC|LGA|OSCCC|PLCC|QFN|QFP|SOJ|SON"); 

       if (twoRegex.Success) 
        twoResult.Add(string.Join(" ", twoLine)); 
      } 

      // Removes the matched values from both of the Regex used above. 
      List<string> userResult = mainResult.Except(oneResult).ToList(); 
      userResult = userResult.Except(twoResult).ToList(); 


      // Prints the proper values into the assigned RichTextBoxes. 
      foreach (var line in userResult) 
       userDefinedRichTextBox.AppendText(line + "\n"); 

      foreach (var line in oneResult) 
       placementOneRichTextBox.AppendText(line + "\n"); 

      foreach (var line in twoResult) 
       placementTwoRichTextBox.AppendText(line + "\n"); 
     } 

     // Catches an exception if the file was not opened. 
     catch (Exception) 
     { 
      MessageBox.Show("Could not match any regex values.", "Regular Expression Match Error", 
       MessageBoxButtons.OK, MessageBoxIcon.Warning); 
     } 
    } 

質問:私は見つける、またはで失敗することができませんなぜ

  • 、誰もが理解して、第二セットREGEX
  • それを修正する方法はありますか?
  • お願いします! :)
+0

どのようなエラーが表示されますか?エラー情報を入力してください。 –

+0

EDIT 「この部分は... 」とは何を意味していますか? – Tocco

答えて

5

2行目の2番目の正規表現でパイプライン文字を見逃していませんか?

+1

ニースキャッチ。彼は右括弧も見逃していた。 –

+2

最後に閉じ括弧もありません。 – Kilanash

+1

私は同意します。 '@" CQFP |は '@" | CQFP | 'にするべきですか? – MRAB

2
Match twoRegex = Regex.Match(twoLine, @"^.+(BGA|SOP8|QSOP|TQSOP|SOIC16|SOIC12|SOIC8|SO8|SO08" 
       + @"|CQFP|LCC|LGA|OSCCC|PLCC|QFN|QFP|SOJ|SON)"); 
関連する問題