Есть ли 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
Вы можете использовать круглые скобки в выражении для создания группы, а затем использовать оператор +
или *
на группе. Свойство 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 ([az] +) suff"
, а затем использовать группы, чтобы захватить этот [az] + в скобки и найти его длину?
Вы также можете использовать эту длину для последующего сопоставления.