Code Bye

Capture类详解及示例

Capture类表示来自单个成功的子表达式捕获的结果。

命名空间:  System.Text.RegularExpressions

Index 原始字符串中发现捕获的子字符串的第一个字符的位置。
Length 获取捕获的子字符串的长度。
Value 从输入字符串中获取捕获的子字符串。

Capture 对象是不可变的,并且没有公共构造函数。 实例通过 CaptureCollection 对象返回,该对象由 Match.Captures 和 Group.Captures 属性返回。 但是,在Match.Captures 属性提供的匹配相关信息中,该匹配与 Match 对象的匹配相同。

如果没有将应用 限定符 于一个捕获组,Group.Captures 属性返回与提供信息大致相同的获取作为 Group 对象的一个 Capture 对象的 CaptureCollection。 如果您将一个量词应用到捕获组,则 Group.IndexGroup.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 对象对象包含每个已捕获的单词的信息。



CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Capture类详解及示例