我正在使用此代码来计算正则表达式模式包含多少组。
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。