3

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

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 

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

4

3 回答 3

2

怎么样Regex.GetGroupNumbers()

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

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

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

演示。

于 2013-09-21T11:57:18.603 回答
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 演示在这里

于 2013-09-21T11:57:18.283 回答
-1

阅读手册

返回值 类型:System.Text.RegularExpressions.Match 一个包含匹配信息的对象。

您需要测试 GroupCount.Success。

于 2013-09-21T11:39:12.577 回答