有没有一个正则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一个组,然后在该组上使用+
或*
运算符。 本Group
的Captures
属性可用于确定匹配的次数。 以下示例计算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它的长度?
你可以使用这个长度进行后续的匹配。