2013-09-21 68 views
3

我使用此代碼來計算正則表達式模式包含多少組。計算正則表達式模式中的組數

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

但它總是返回1,如果模式不匹配:

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

當模式匹配輸入它返回成功。

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

我需要的是一個功能在任何情況下的模式計算組數。

+0

這是什麼意思? '打開支架「(...)」' –

+0

@monocular我很好奇看到'模式',你用來匹配。 – PurpleXenon

+0

@HamletHakobyan我的意思是我想要計算一個正則表達式模式包含多少組。例如,這個模式有3個組:(([az])([1-9])) – monocular

回答

2

Regex.GetGroupNumbers()怎麼樣?

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

通過從Regex對象獲得的結果,它是獨立於任何特定的比賽,這是你想要什麼。

您可能希望從結果中減去1,因爲整個字符串也是一個組(索引0),具體取決於您要查找的內容。

Demo.

0

Read the manual

返回值 類型:System.Text.RegularExpressions.Match 包含有關比賽信息的對象。

您需要測試GroupCount.Success。

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演示here

+0

那麼,正則表達式的方法和行爲在VB中都是一樣的.NET(畢竟它們都只是使用.NET類)。對於這個例子,它實際上只是語法上不同的聲明和構造函數。 –