Есть ли регулярный эффект, который позволяет мне подсчитать количество повторений, совпадающих с операторами * и +?
Есть ли аромат регулярного выражения, который позволяет мне подсчитать количество повторений, согласованных операторами *
и +
? Я хотел бы узнать, возможно ли это в платформе .NET.
Ответы
Ответ 1
Вам повезло, потому что на самом деле .NET regex делает это (что я считаю совершенно уникальным). По существу в каждом Match
каждый Group
хранит все Captures
, которые были сделаны.
Итак, вы можете подсчитать, сколько раз повторяемый шаблон соответствует вводу:
- Создание группы захвата
- Подсчет количества захватов этой группы в каждом матче
- Вы можете выполнить итерацию через индивидуальный захват, если хотите!
Вот пример:
Regex r = new Regex(@"\b(hu?a)+\b");
var text = "hahahaha that 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
Ответ 2
Вы можете использовать круглые скобки в выражении для создания группы, а затем использовать оператор +
или *
в группе. Свойство 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
как насчет принятия "pref ([a-z]+) suff"
то используйте группы для захвата этого [a-z] + в скобке и найдите его длину?
Вы можете использовать эту длину для последующего сопоставления.