是否有正则表达式的风格,允许我计算*和+运算符匹配的重复次数?

时间:2010-06-12 15:19:14

标签: .net regex matching repeat capturing-group

是否有正则表达式风格允许我计算*+运算符匹配的重复次数?我特别想知道它是否可以在.NET平台下使用。

3 个答案:

答案 0 :(得分:8)

你很幸运,因为事实上.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);
}

打印(as seen on ideone.com):

hahahaha 4
huahuahua 3
huahahahuaha 5

API参考

答案 1 :(得分:3)

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

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

if (match.Success)
{
    Console.WriteLine(match.Groups[1].Captures.Count);
}

答案 2 :(得分:0)

如何接受"pref ([a-z]+) suff"

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

您也可以使用此长度进行后续匹配。