Как проверить, существует ли именованная группа захвата? - программирование
Подтвердить что ты не робот

Как проверить, существует ли именованная группа захвата?

В моем регулярном выражении шаблон выглядит примерно так:

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

Итак, я хотел бы знать, существует ли <somename>. Если бы это была нормальная группа захвата, я мог бы просто проверить, больше ли групп захвата, чем количество групп без этой/группы захвата, но у меня здесь нет опции.

Может ли кто-нибудь помочь мне найти способ обойти это? Мне не нужно, чтобы это было эффективно, это просто для одноразовой программы, которая использовалась для сортировки, поэтому я не против, если это займет немного времени. Это не будет для общедоступного кода.

4b9b3361

Ответ 1

В соответствии с документацией:

Если имя группы не является именем группы захвата в коллекции, или если имя группы - это имя группы захвата, которая не была согласованный во входной строке, метод возвращает объект Group, чей Свойство Group.Success является ложным и чье свойство Group.Value равно 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;