2017-02-24 31 views
1

を実行しているものに基づいて別のマッチを返します231ファイル。正規表現は、私は、次の正規表現を使用している表現

enter image description here

私は同じフォルダを反復処理すると、すべてのファイルを取得するためにC#を使用している場合は、私は223個のファイルで1070試合を取得します。

static string uat04Dir = @"C:\Users\me\Desktop\UAT04_Generated_Scripts\"; 

static void Main(string[] args) 
{ 
    Regex r = new Regex(@"(PatientID).*?[\d]+"); 
    int matchCounter = 0; 
    int fileCounter = 0; 

    string[] files = Directory.GetFiles(uat04Dir, "*.sql", SearchOption.AllDirectories); 

    foreach (string file in files) 
    { 
     string lines = File.ReadAllText(file); 

     MatchCollection matches = r.Matches(lines, 0); 
     matchCounter += matches.Count; 

     if (matches.Count > 0) 
      fileCounter++; 
    } 

    Console.WriteLine(String.Format("{0} Matches in {1} files.", matchCounter, fileCounter)); 
} 

なぜこの結果が異なるのですか?

+2

メモ帳++では、大文字と小文字を区別しない検索を使用しています。 C#では、検索で大文字と小文字が区別されます。 'RegexOptions.IgnoreCase'フラグを付けて正規表現をコンパイルし、同じ結果が得られるかどうか確認してください。 –

+0

どのようにする必要があります:例http://imgur.com/a/gpVDA対http://imgur.com/a/SBwvz – sln

答えて

1

メモ帳++では、マッチケースチェックボックスが有効でないため、大文字と小文字を区別しない検索を使用しています。

C#では、検索で大文字と小文字が区別されるため、オプションは使用していません。

C#コードでRegexOptions.IgnoreCaseフラグを使って正規表現をコンパイルすると、同じ結果が得られます。

+0

これらの朝の1つ:)ありがとう – sab669

関連する問題