正则表达式(1) Match Match.Groups Match.Groups.Captures

  • A+
所属分类:DoNet

在使用正则表达式的Regex.Matches方法时,会用到返回值的两个参数一个时Match.Groups,一个是Match.Groups.Captures 。

今天讲解一个这两个参数的使用方法,先看一下示例代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
string input = "Yes. This dog is very friendly.";
string pattern = @"\b((\w+)[\s.])+";
foreach (Match match in Regex.Matches(input, pattern))
{
    Console.WriteLine("Match: {0}", match.Value);
    for (int groupCtr = 0; groupCtr < match.Groups.Count; groupCtr++)
    {
        Group group = match.Groups[groupCtr];
        Console.WriteLine("   Group {0}: {1}", groupCtr, group.Value);
        for (int captureCtr = 0; captureCtr < group.Captures.Count; captureCtr++)
            Console.WriteLine("      Capture {0}: {1}", captureCtr,
                                group.Captures[captureCtr].Value);
    }
}
模式 描述
(\w+) 匹配一个或多个单词字符。 这是第二个捕获组。
[\s.]) 匹配空白字符或句点 (".")
((\w+)[\s.]) 匹配一个或多个单词字符后跟空白字符或句点 ("."),这是第一个捕获组
((\w+)[\s.])+ 匹配一个或多个单词字符或字符后跟空白字符或句点 (".")

运行结果如下:

正则表达式(1)  Match  Match.Groups  Match.Groups.Captures

首先,调用Regex.Matches方法匹配输入input,使用正则表达式pattern。

这个匹配将会产生两个匹配结果第一个返回的Match的Value 是 Yes.

然后遍历match.Groups,match.Groups.Count 等于3,Groups中的第一个元素,等于match.Value 也就是Yes. 第二个元素对应于第一个捕捉组也就是 ((\w+)[\s.]),表示以一个或者多个字符开始,并以空格"\s"或者句号"."结尾的第一个捕捉组,也就是Yes. 。第三个元素对应于第二个捕捉组也就是(\w+),表示一个或多个单词字符,也就是Yes 

group.Captures.Count表示当前匹配组的所有元素。由于第一个匹配结果就一个Yes. ,所以对应的三个Group的三个Capture 分别是Yes.  Yes.  Yes

第二个匹配的Match 的Value是This dog is very friendly.

然后遍历match.Groups,match.Groups.Count 等于3,Groups中的第一个元素,等于match.Value 也就是This dog is very friendly. 第二个元素对应于第一个捕捉组也就是 ((\w+)[\s.]),表示以一个或者多个字符开始,并以空格"\s"或者句号"."结尾的第一个捕捉组,也就是friendly.。第三个元素对应于第二个捕捉组也就是(\w+),表示一个或多个单词字符,也就是friendly

Groups 只会存储该匹配组中匹配的最后一个元素,如果想要获取其他元素需要从Capture中获取。

Group 0中的Capture 有1个,也就是当前Value的值 This dog is very friendly.

Group 1中的Capture 有5个,分别是

Capture 0: This

Capture 1:dog

Capture 2:is

Capture 3:very

Capture 4:friendly.

Group 2中的Capture 有5个,分别是

Capture 0: This

Capture 1:dog

Capture 2:is

Capture 3:very

Capture 4:friendly

weinxin
我的微信
这是我的微信扫一扫
maple

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: