У меня есть следующий код (обратите внимание, что я говорю здесь о 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
Как именованные группы C# обрабатывают встроенные группы ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение