#c# #regex #naming
#c# #регулярное выражение #именование
Вопрос:
Например, у меня есть регулярное выражение с именованными группами;
A=(?<A>.*),B=(?<B>.*),C=(?<_C>.*)
пример регулярного выражения 101
Группы совпадений, в данном случае A, B и _C, повторяются для установки некоторых данных в файле. Однако _C не используется, поэтому код пропускает это, потому что имя группы начинается с _ .
Всегда существует группа «Полного соответствия», которая имеет имя 0. Фактически и соответствующей группе, которая не названа, будет присвоен номер, как и по умолчанию для неназванных групп.
Мне было любопытно, можно ли присвоить «Полному совпадению» другое имя, например _Full_Match, чтобы приведенная выше логика все еще применялась? В противном случае итерация всех групп включает Group["0"]
в себя то, что я не хочу.
//c# example with System.Linq to iterate groups
foreach (var x in regex.GetGroupNames()
.Where(y => y != "0" amp;amp; y.Substring(0, 1) != "_"))
{
/// do something with x
}
Комментарии:
1. Вы не можете использовать
regex.GetGroupNames().Skip(1).Where(y => y.Substring(0, 1) != "_")
?2. @vc74 это работает как решение, но не отвечает на вопрос о фактическом присвоении имени полному совпадению.
3. Боюсь, у вас нет возможности назвать эту группу. Одна вещь, которую вы могли бы сделать, это вместо использования _ в качестве начального символа для игнорирования групп, использовать целочисленную форму и исключить любое имя группы, которое не может быть проанализировано как целое число (включая полное совпадение)
4. интересный вопрос, но я должен согласиться с @vc74, основываясь на моих исследованиях