1. 程式人生 > >正則表示式 GROUP 分組 C#

正則表示式 GROUP 分組 C#

在一個正則表示式中,如果要提取出多個不同的部分(子表示式項),需要用到分組功能。

在 C# 正則表示式中,Regex 成員關係如下,其中 Group 是其分組處理類。

Regex –> MatcheCollection (匹配項集合)

          –> Match (單匹配項 內容)

                –> GroupCollection (單匹配項中包含的 "(分組/子表示式項)" 集合)

                      –> Group ( "(分組/子表示式項)" 內容)

                            –> CaputerCollection (分組項內容顯示基礎?)

                                  –> Caputer

Group 對分組有兩種訪問方式:

1、陣列下標訪問

在 ((\d+)([a-z]))\s+ 這個正則表示式裡總共包含了四個分組,按照預設的從左到右的匹配方式,

Groups[0]    代表了匹配項本身,也就是整個整個表示式 ((\d+)([a-z]))\s+

Groups[1]    代表了子表示式項 ((\d+)([a-z]))

Groups[2]    代表了子表示式項 (\d+)

Groups[3]    代表了子表示式項 ([a-z])

00 string text = "1A 2B 3C 4D 5E 6F 7G 8H 9I 10J 11Q 12J 13K 14L 15M 16N ffee80 #800080"
;
01 Response.Write(text + "<br/>");
02
03 string strPatten = @"((\d+)([a-z]))\s+";
04 Regex rex = new Regex(strPatten, RegexOptions.IgnoreCase);
05 MatchCollection matches = rex.Matches(text);
06
07 //提取匹配項
08 foreach (Match match in matches)
09 {
10 GroupCollection groups = match.Groups;
11 Response.Write(string.Format("<br/>{0} 共有 {1} 個分組:{2}<br/>"
12 , match.Value, groups.Count, strPatten));
13
14 //提取匹配項內的分組資訊
15 for (int i = 0; i < groups.Count; i++)
16 {
17 Response.Write(
18 string.Format("分組 {0} 為 {1},位置為 {2},長度為 {3}<br/>"
19 , i
20 , groups[i].Value
21 , groups[i].Index
22 , groups[i].Length));
23 }
24 }
25
26 /* 
27 * 輸出:
28 1A 2B 3C 4D 5E 6F 7G 8H 9I 10J 11Q 12J 13K 14L 15M 16N ffee80 #800080
29
30 1A 共有 4 個分組:((\d+)([a-z]))\s+
31 分組 0 為 1A ,位置為 0,長度為 3
32 分組 1 為 1A,位置為 0,長度為 2
33 分組 2 為 1,位置為 0,長度為 1
34 分組 3 為 A,位置為 1,長度為 1
35
36 ....
37
38 */