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



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

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 

我需要的是一个在任何情况下都计算模式中组数的函数

Regex.GetGroupNumbers()怎么样?

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

通过从Regex对象获取结果,它独立于任何特定的匹配项,这正是您想要的。

您可能希望从结果中减去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演示在这里。

阅读手册:

返回值 类型:系统.文本.正则表达式.匹配 一个对象,包含有关匹配项的信息。

您需要测试 GroupCount.Success。

最新更新