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

StackOverflow https://stackoverflow.com/questions/3029127

Вопрос

Есть ли вкус регулятора 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] + в кронштейне и найдите ее длину?

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top