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

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

  • CaptureCollection

Вы можете использовать круглые скобки в выражении для создания группы, а затем использовать оператор + или * в группе. Свойство Captures Group может использоваться для определения количества совпадений времени. В следующем примере подсчитывается количество последовательных строчных букв в начале строки:

 var regex = new Regex(@"^([az])+"); var match = regex.Match("abc def"); if (match.Success) { Console.WriteLine(match.Groups[1].Captures.Count); } 

как насчет принятия "pref ([az]+) suff"

затем используйте группы для захвата этого [az] + в скобке и найдите его длину?

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

Давайте будем гением компьютера.