计算正则表达式模式中的组数

时间:2013-09-21 11:07:01

标签: .net regex vb.net

我正在使用此代码来计算正则表达式模式包含的组数。

Dim GroupCount As Integer = Regex.Match(input, pattern).Groups.Count

当模式匹配输入时,它返回成功:

Dim GroupCount As Integer = Regex.Match(" something ", "( )something( )").Groups.Count 

但如果模式不匹配,它总是返回1。

Dim GroupCount As Integer = Regex.Match("ABC", "( )something( )").Groups.Count 

在任何情况下,我需要的是函数来计算模式中的组数

3 个答案:

答案 0 :(得分:2)

Regex.GetGroupNumbers()怎么样?

Dim pattern As New Regex("( )something( )")
Dim groupCount As Integer = pattern.GetGroupNumbers().Length

通过从Regex对象获取结果,它与任何特定匹配无关,这正是您想要的。

您可能希望从结果中减去1,因为整个字符串也是一个组(在索引0处),具体取决于您要查找的内容。

Demo.

答案 1 :(得分:0)

如果我找到你的话,你需要在任何单词中计算()的实例。如果我是正确的,那么这应该对你有帮助;

Dim s As String = "( )yourstring()somevalue( )getit()"
            'A sample string.
Dim rgx As New Regex("(?<BraceGroup>\([ ]*\))", RegexOptions.Singleline)
            'Regex pattern to match '( )' or '()'.
Dim matches As MatchCollection = rgx.Matches(s)
            'Get all matches.
Dim count As Integer = matches.Count
            'Number of matches.
Console.WriteLine(String.Format("Total '() captures' found : {0}", count))

Ideone demo here

答案 2 :(得分:-1)

Read the manual

  

返回值   键入:System.Text.RegularExpressions.Match   包含有关匹配信息的对象。

您需要测试GroupCount.Success。