2017-03-13 6 views
1

Ich versuche, alle Ordner innerhalb eines bestimmten Pfades zu erhalten, die einem Muster entsprechen. Das Muster, das ich brauche, ist ein H mit einer Nummer, die von 1 bis 9 gehen kann.Wie Regex für Suchmuster mit Buchstaben und Zahlen zu erstellen?

Dies ist, wie ich versuche, einen regulären Ausdruck zu erstellen, aber es stürzt mit einem „Illegal Muster“ Ausnahme:

Regex searchPattern = new Regex(@"(H\d +)\"); 

Dies ist, wie ich die Ordner (Pfade) erhalten:

List<string> folders = Directory.GetDirectories(path).Where(p => searchPattern.IsMatch(path)).ToList(); 

Wie kann ich einen ordnungsgemäßen regulären Ausdruck erstellen, der den Buchstaben H mit einer Zahl übereinstimmt?

+3

Warum nicht '@" H [1-9] "'? Ein 'H' mit einer Ziffer. Könnten Sie bitte ein paar Wege nennen, die passen sollten und nicht sollten? Beachten Sie, dass Sie am Ende des Musters kein Literal '' '' haben können, deshalb erhalten Sie einen Fehler. –

+0

Hier ist eine gute Seite, mit der Sie herumspielen können: http://www.regexpal.com/ –

+0

Wenn ich es so mache, bekomme ich eine ArgumentExeption: Eine nicht behandelte Ausnahme vom Typ 'System.ArgumentException' ist in System.dll aufgetreten Information: Parsing "(H [1-9]" - Nicht genug) 's. –

Antwort

1

Ich versuche, den regulären Ausdruck zu erstellen, aber es stürzt ab (illegales Muster)

Das Problem, das Sie haben durch die wörtlichen \ verursacht wird, die am Ende des Musters ist. Der Backslash ist ein Fluchtsymbol in einem Regex-Muster und muss mit einem Char gefolgt werden.

Ein Muster, das H Spiele ist H und ein Muster, das eine Ziffer 1-9 Spiele ist [1-9] (eine positive Zeichenklasse). So erklärt es als

var searchPattern = new Regex(@"H[1-9]"); 

Dann, wenn Sie die Variable als p im Lambda-Teil zu deklarieren, verwenden p statt path (das ursprüngliche Verzeichnis für Unterordner suchen).

0

Der folgende Code sollte Ihren Anforderungen entsprechen. Bitte beachten Sie, dass Ihr Lambda Pfad anstelle des Arguments p verwendet.

string path = "C:/my-path"; 
Regex searchPattern = new Regex(@"H\d"); 
List<string> folders = Directory.GetDirectories(path).Where(p => searchPattern.IsMatch(p)).ToList(); 
0

Könnten Sie Beispiel-Eingang? Wenn ich das ausführen:

var path = "H3"; 
var match = Regex.Match(path, "H[1-9]").Success; 

if (match) 
{ 
    Console.WriteLine("Match found!"); 
    Console.ReadKey(); 
} 

Ich bekomme "Spiel gefunden!" in der Konsole. Obwohl, ich weiß nicht, was Ihre genaue Eingabe ist. Meine Antwort basiert rein auf: "Das Muster, das ich brauche, ist ein H mit einer Zahl, die von 1 bis 9 gehen kann."

Verwandte Themen