Capture类表示来自单个成功的子表达式捕获的结果。
命名空间: System.Text.RegularExpressions
Index | 原始字符串中发现捕获的子字符串的第一个字符的位置。 |
Length | 获取捕获的子字符串的长度。 |
Value | 从输入字符串中获取捕获的子字符串。 |
Capture 对象是不可变的,并且没有公共构造函数。 实例通过 CaptureCollection 对象返回,该对象由 Match.Captures 和 Group.Captures 属性返回。 但是,在Match.Captures 属性提供的匹配相关信息中,该匹配与 Match 对象的匹配相同。
如果没有将应用 限定符 于一个捕获组,Group.Captures 属性返回与提供信息大致相同的获取作为 Group 对象的一个 Capture 对象的 CaptureCollection。 如果您将一个量词应用到捕获组,则 Group.Index、Group.Length 和 Group.Value 属性只提供有关最后的捕获组的信息,而在 CaptureCollection 中的 Capture 对象提供有关所有子表达式捕获的信息。 该示例提供了说明。
下面的示例定义匹配不含句号 (”.”) 以外标点的句子的正则表达式。
using System; using System.Text.RegularExpressions; public class Example { public static void Main() { string input = "Yes. This dog is very friendly."; string pattern = @"((\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); } } } } // The example displays the following output: // Match: Yes. // Group 0: Yes. // Capture 0: Yes. // Group 1: Yes. // Capture 0: Yes. // Group 2: Yes // Capture 0: Yes // Match: This dog is very friendly. // Group 0: This dog is very friendly. // Capture 0: This dog is very friendly. // Group 1: friendly. // Capture 0: This // Capture 1: dog // Capture 2: is // Capture 3: very // Capture 4: friendly. // Group 2: friendly // Capture 0: This // Capture 1: dog // Capture 2: is // Capture 3: very // Capture 4: friendly
正则表达式模式 ((\w+)[\s.])+ 的定义如下表所示。 请注意此正则表达式,限定符 (+) 应用于整个正则表达式。
模式 |
描述 |
---|---|
(\w+) | 匹配一个或多个单词字符。 这是第二个捕获组。 |
[\s.]) | 匹配空格字符或句号 (“.”)。 |
((\w+)[\s.]) | 匹配一个或多个单词字符后跟一个空格字符或句号 (“.”)。 这是第一个捕获组。 |
((\w+)[\s.])+ | 匹配一处或多处的一个或多个单词字符后跟空格字符或句号 (“.”)。 |
在此示例中,输入字符串由两个句子组成。 如输出所示,第一句只包含一个单词,因此,CaptureCollection 对象具有表示获取和 Group 对象相同的单个 Capture 对象。 第二个句子由多个单词,因此,Group 对象仅包含有关最后匹配的子表达式的信息。 组 1,表示第一个捕获,在具有收尾阶段的句子包含最后一个单词。 代表第二个捕获的组 2,包含了句子中的最后一个单词。 但是,在组的 CaptureCollection 对象中的 Capture 对象捕获每个子表达式匹配。 第一个捕获组的捕获集合中的 Capture 对象对象包含每个已捕获的单词和空格字符或句号的信息。 第二个捕获组的捕获集合中的 Capture 对象对象包含每个已捕获的单词的信息。