5

是否有一种正则表达式可以让我计算与*and+运算符匹配的重复次数?我特别想知道在.NET 平台下是否可行。

4

3 回答 3

9

你很幸运,因为事实上 .NET 正则表达式就是这样做的(我认为这是非常独特的)。基本上在每一个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 参考

于 2010-06-12T15:50:58.533 回答
3

您可以在表达式中使用括号来创建一个组,然后在该组上使用+or*运算符。的Captures属性Group可用于确定匹配的次数。以下示例计算字符串开头的连续小写字母数:

var regex = new Regex(@"^([a-z])+");
var match = regex.Match("abc def");

if (match.Success)
{
    Console.WriteLine(match.Groups[1].Captures.Count);
}
于 2010-06-12T15:39:50.213 回答
0

服用怎么样"pref ([a-z]+) suff"

然后使用组来捕获括号中的 [az]+ 并找到它的长度?

您也可以将此长度用于后续匹配。

于 2010-06-12T15:25:34.413 回答