Есть ли регулярное выражение, позволяющее мне посчитать количество повторений, соответствующих операторам * и +?

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

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

Другие вопросы по тегам