有没有一个正则expression式的味道,让我可以计算*和+操作符匹配的重复次数?

有没有一个正则expression式的味道,让我可以计算*+操作符匹配的重复次数? 我特别想知道在.NET平台下是否有可能。

你很幸运,因为事实上.NET正则expression式可以做到这一点(我认为这很独特)。 基本上在每Match ,每个Group存储每个Captures

因此,您可以通过以下方法计算可重复模式匹配input的次数:

  • 使它成为一个捕获组
  • 计算每个比赛中该组的抓牌数量
    • 如果你愿意的话,你也可以通过单独的捕获进行迭代。

这是一个例子:

 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

您可以在expression式中使用圆括号来创build一个组,然后在该组上使用+*运算符。 本GroupCaptures属性可用于确定匹配的次数。 以下示例计算string开始处的连续小写字母数:

 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] +并find它的长度?

你可以使用这个长度进行后续的匹配。