2013-05-05 18 views
15

In meiner regex ist das Muster so etwas wie diese:Wie überprüft man, ob eine benannte Erfassungsgruppe existiert?

@"Something\(\d+, ""(.+)""(, .{1,5}, \d+, (?<somename>\d+)?\)," 

Also ich würde gerne wissen, ob <somename> existiert. Wenn es sich um eine normale Erfassungsgruppe handelt, könnte ich einfach prüfen, ob die Erfassungsgruppen größer sind als die Anzahl der Gruppen ohne diese Erfassungsgruppe (n), aber ich habe hier keine Option.

Kann mir jemand helfen, einen Weg zu finden? Ich brauche es nicht, um effizient zu sein, es ist nur für ein einmaliges Programm, das zum Sortieren verwendet wird, also macht es mir nichts aus, wenn es ein bisschen dauert, um zu laufen. Es wird nicht für den öffentlichen Code sein.

Antwort

23

Nach dem documentation:

Wenn der Gruppenname nicht der Name einer Erfassungsgruppe in der Sammlung ist, oder Gruppenname ist der Name einer Erfassungsgruppe, die in der Eingabezeichenfolge wurde nicht abgestimmt gibt die Methode ein Group-Objekt zurück, dessen Group.Success-Eigenschaft false ist und deren Group.Value-Eigenschaft String.Empty lautet.

var regex = new Regex(@"Something\(\d+, ""(.+)""(, .{1,5}, \d+, (?<somename>\d+)?\),"); 
var match = regex.Match(input); 
var group = match.Groups["somename"]; 
bool exists = group.Success; 
+2

ich eine IndexOutOfRangeException erwartet hatte. Ich hätte es versuchen sollen. Blöd. Vielen Dank! +1. –

Verwandte Themen