2013-05-05 9 views
15

W moim regex wzór jest coś takiego:Jak sprawdzić, czy wymieniona grupa przechwytująca istnieje?

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

Więc chciałbym wiedzieć, czy <somename> istnieje. Jeśli byłaby to normalna grupa przechwytująca, mógłbym tylko sprawdzić, czy grupy przechwytywania są większe niż liczba grup bez tej/tych grup przechwytywania, ale nie mam tutaj tej opcji.

Czy ktoś może mi pomóc znaleźć sposób obejścia tego? Nie potrzebuję go, żeby był wydajny, jest przeznaczony tylko do jednorazowego programu, który jest używany do sortowania, więc nie mam nic przeciwko temu, czy trzeba trochę uciekać. To nie będzie dla publicznego kodu.

Odpowiedz

23

Według documentation:

Jeśli groupname nie jest nazwą grupy przechwytywania w kolekcji, czy groupname to nazwa grupy przechwytywania, który nie został dopasowane w ciągu wejściowego , metoda zwraca obiekt grupy, którego właściwość Group.Success jest nieprawidłowa i której właściwość Group.Value wynosi String.Empty.

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

Spodziewałem się wyjątku IndexOutOfRangeException. Powinienem to wypróbować. Głupi. Dzięki! +1. –

Powiązane problemy