Как именованные группы C# обрабатывают встроенные группыC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как именованные группы C# обрабатывают встроенные группы

Сообщение Anonymous »

У меня есть следующий код (обратите внимание, что я говорю здесь о C#/.net, поскольку некоторые из них немного отличаются в других вариантах регулярного выражения):
var str = @"abc(?.*)def(?((?[0-9])-)+)";
var regex = new Regex(str);
var test = "abcxyzdef1-2-3-";
var match = regex.Match(test);

Это соответствует следующим строкам:
abc xyz def 1-2-3-
abc
.* This is called cg1
def
([0-9]-)+ This is called cg2

Однако у меня также есть встроенная группа в cg2, где каждая цифра представляет собой отдельную группу — cg3.
Поэтому при тестировании я получил следующие группы:match[0]: abcxyzdef1-2-3-
match[1]. 3-
match[2]. cg1 xyz
match[3]. cg2 1-2-3-
match[4]. cg3 3

Похоже, что cg3 фиксирует только последний экземпляр этой группы, а именно последние 3.
Есть ли способ использовать группы для получения всех экземпляров, которым соответствует cg3, или я бы сделал это? нужно получить cg2 и перезапустить матч только из-за этого? А именно:
var cg2 = match.Groups["cg2"];
var innerRegex = new Regex("(?[0-9])-");
var innerMatches = innerRegex.Matches(cg2.Value);
foreach (Match m in innerMatches)
{
Debug.WriteLine(m.Groups["digit"].Value);
}


Подробнее здесь: https://stackoverflow.com/questions/787 ... ded-groups
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»