2017-02-24 1 views
1

Ich verwende die folgende Regex: (PatientID).*?[\d]+Regex geben verschiedene Spiele, basierend auf, was den Ausdruck ausführt

Wenn ich Notepad ++ 's ‚In Dateien suchen‘ verwenden Features diesen Ausdruck auf einem bestimmten Ordner ausgeführt wird, erhalte ich 1118 Spiele in 231 Dateien.

enter image description here

Wenn ich C# verwenden, die gleichen Ordner iterieren und alle Dateien bekommen, erhalte ich 1070 Treffer in 223 Dateien.

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)); 
} 

Warum gibt das unterschiedliche Ergebnisse zurück?

+2

In Notepad ++ verwenden Sie eine Suche ohne Berücksichtigung der Groß- und Kleinschreibung. In C# wird bei der Suche die Groß- und Kleinschreibung berücksichtigt. Versuchen Sie, die Regex mit dem Flag "RegexOptions.IgnoreCase" zu kompilieren und sehen Sie, ob Sie die gleichen Ergebnisse erhalten. –

+0

Wie es sein sollte: Beispiel http://imgur.com/a/gpVDA vs http://imgur.com/a/SBwvz – sln

Antwort

1

In Notepad ++ verwenden Sie eine Suche ohne Berücksichtigung der Groß-/Kleinschreibung, da das Kontrollkästchen MatchCase nicht aktiviert ist.

In C# wird bei der Suche zwischen Groß- und Kleinschreibung unterschieden, Sie verwenden keine Optionen.

Kompilieren Sie die Regex mit RegexOptions.IgnoreCase Flag im C# -Code, und es wird die gleichen Ergebnisse liefern.

+0

Einer dieser Morgen :) Danke – sab669

Verwandte Themen