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