Есть ли вкус Regex, который позволяет мне подсчитать количество повторений, сопоставляемых операторами * и +?
-
26-09-2019 - |
Вопрос
Есть ли вкус регулятора REGEX, который позволяет мне подсчитать количество повторений, сопоставленных *
а также +
Операторы? Я бы специально хотел бы знать, возможно ли это под платформой .net.
Решение
Тебе повезло, потому что на самом деле .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 Ссылки
Другие советы
Вы можете использовать скобки в выражении, чтобы создать группу, а затем использовать +
или *
Оператор на группе. То Captures
свойство Group
Может использоваться для определения того, сколько раз это было сопоставлено. В следующем примере подсчитывается количество последовательных строчных букв в начале строки:
var regex = new Regex(@"^([a-z])+");
var match = regex.Match("abc def");
if (match.Success)
{
Console.WriteLine(match.Groups[1].Captures.Count);
}
Как насчет взять "pref ([a-z]+) suff"
Затем используйте группы для захвата, чтобы [AZ] + в кронштейне и найдите ее длину?
Вы можете использовать эту длину для последующего совпадения.