正則表示式 GROUP 分組 C#
阿新 • • 發佈:2019-02-05
在一個正則表示式中,如果要提取出多個不同的部分(子表示式項),需要用到分組功能。
在 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 |
*/ |