Существует ли regex разновидность, которая позволяет мне считать количество повторений подобранным * и + операторы?

Есть ли regex разновидность, которая позволяет мне считать количество повторений подобранным * и + операторы? Я конкретно хотел бы знать, возможно ли это под Платформой.NET.

5
задан polygenelubricants 26 July 2010 в 08:11
поделиться

3 ответа

Вам повезло, потому что на самом деле .NET regex делает это (что я считаю довольно уникальным). По сути, в каждом Match, каждой Group хранится каждый Captures, который был сделан.

Таким образом, вы можете подсчитать, сколько раз повторяющийся шаблон совпал с входом, если:

  • сделаете его группой захвата
  • подсчитаете, сколько захватов было сделано этой группой в каждом матче.
    • При желании можно итерировать и отдельные захваты!

Вот пример:

Regex r = new Regex(@"\b(hu?a)+\b");

var text = "hahahaha that's funny but not huahuahua more like huahahahuaha";
foreach (Match m in r.Matches(text)) {
   Console.WriteLine(m + " " + m.Groups[1].Captures.Count);
}

Это печатает (как показано на ideone.com):

hahahaha 4
huahuahua 3
huahahahuaha 5

API ссылки

8
ответ дан 13 December 2019 в 19:21
поделиться

Вы можете использовать круглые скобки в выражении для создания группы, а затем использовать оператор + или * на группе. Свойство Captures группы Group можно использовать для определения того, сколько раз она была сопоставлена. Следующий пример подсчитывает количество последовательных строчных букв в начале строки:

var regex = new Regex(@"^([a-z])+");
var match = regex.Match("abc def");

if (match.Success)
{
    Console.WriteLine(match.Groups[1].Captures.Count);
}
3
ответ дан 13 December 2019 в 19:21
поделиться

как насчет того, чтобы взять "pref ([az] +) suff"

, а затем использовать группы, чтобы захватить этот [az] + в скобки и найти его длину?

Вы также можете использовать эту длину для последующего сопоставления.

0
ответ дан 13 December 2019 в 19:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: