Regex.GroupNameFromNumber(Int32) 方法

定义

获取与指定组号相对应的组名。

public:
 System::String ^ GroupNameFromNumber(int i);
public string GroupNameFromNumber (int i);
member this.GroupNameFromNumber : int -> string
Public Function GroupNameFromNumber (i As Integer) As String

参数

i
Int32

要转换为相应组名的组号。

返回

包含与指定组号关联的组名的字符串。 如果没有与 i 对应的组名,此方法会返回 Empty

示例

以下示例定义一个正则表达式模式,该模式与包含美国城市名称、州名和邮政编码的地址行匹配。 该示例使用 GroupNameFromNumber 方法检索捕获组的名称。 然后,它使用这些名称检索相应的匹配项捕获组。

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string pattern = @"(?<city>[A-Za-z\s]+), (?<state>[A-Za-z]{2}) (?<zip>\d{5}(-\d{4})?)";
      string[] cityLines = {"New York, NY 10003", "Brooklyn, NY 11238", "Detroit, MI 48204", 
                            "San Francisco, CA 94109", "Seattle, WA 98109" };
      Regex rgx = new Regex(pattern);
      List<string> names = new List<string>();
      int ctr = 1;
      bool exitFlag = false;
      // Get group names.
      do {
         string name = rgx.GroupNameFromNumber(ctr);
         if (! String.IsNullOrEmpty(name))
         {
            ctr++;
            names.Add(name);
         }
         else
         {
            exitFlag = true;
         }
      } while (! exitFlag);

      foreach (string cityLine in cityLines)
      {
         Match match = rgx.Match(cityLine);
         if (match.Success)
            Console.WriteLine("Zip code {0} is in {1}, {2}.", 
                               match.Groups[names[3]], 
                               match.Groups[names[1]], 
                               match.Groups[names[2]]);
      } 
   }
}
// The example displays the following output:
//       Zip code 10003 is in New York, NY.
//       Zip code 11238 is in Brooklyn, NY.
//       Zip code 48204 is in Detroit, MI.
//       Zip code 94109 is in San Francisco, CA.
//       Zip code 98109 is in Seattle, WA.
Imports System.Collections.Generic
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim pattern As String = "(?<city>[A-Za-z\s]+), (?<state>[A-Za-z]{2}) (?<zip>\d{5}(-\d{4})?)"
      Dim cityLines() As String = {"New York, NY 10003", "Brooklyn, NY 11238", "Detroit, MI 48204", _
                                   "San Francisco, CA 94109", "Seattle, WA 98109" }
      Dim rgx As New Regex(pattern)
      Dim names As New List(Of String)      
      Dim ctr As Integer = 1
      Dim exitFlag As Boolean = False
      ' Get group names.
      Do 
         Dim name As String = rgx.GroupNameFromNumber(ctr)
         If Not String.IsNullOrEmpty(name) Then
            ctr += 1
            names.Add(name)
         Else
            exitFlag = True
         End If
      Loop While Not exitFlag
      
      For Each cityLine As String In cityLines
         Dim match As Match = rgx.Match(cityLine)
         If match.Success Then
            Console.WriteLine("Zip code {0} is in {1}, {2}.", _
                               match.Groups.Item(names.Item(3)), _
                               match.Groups.Item(names.Item(1)), _
                               match.Groups.Item(names.Item(2)))
         End If   
      Next 
   End Sub
End Module
' The example displays the following output:
'       Zip code 10003 is in New York, NY.
'       Zip code 11238 is in Brooklyn, NY.
'       Zip code 48204 is in Detroit, MI.
'       Zip code 94109 is in San Francisco, CA.
'       Zip code 98109 is in Seattle, WA.

正则表达式模式由以下表达式定义:

(?<city>[A-Za-z\s]+), (?<state>[A-Za-z]{2}) (?<zip>\d{5}(-\d{4})?)

下表演示了如何解释正则表达式模式。

模式 说明
(?<city>[A-Za-z\s]+) 匹配一个或多个字母或空格字符。 为此捕获的组分配名称 city
, 匹配逗号 (,) 后跟空格字符。
(?<state>[A-Za-z]{2}) 匹配两个字母字符。 为此捕获的组分配名称 state。 此组应后跟一个空格字符。
(?<zip>\d{5}(-\d{4})?) 匹配五位数字,后跟零位或一个连字符,后跟四位。 为此捕获的组分配名称 zip

注解

正则表达式模式可能包含命名或带编号的捕获组,它们描述模式匹配中的子表达式。 编号组由 语法 (子表达式) 分隔,并根据它们在正则表达式中的顺序分配编号。 命名组由语法 (分隔?<名字>subexpression) 还是 (?name'subexpression) ,其中 name 是标识子表达式的名称。 (有关详细信息,请参阅 Grouping Constructs.) 方法 GroupNameFromNumber 通过正则表达式中的序号位置标识命名组和编号组。 序号位置零始终表示整个正则表达式。 然后,所有编号组在命名组之前进行计数,而不考虑它们在正则表达式模式中的实际位置。

如果 i 是命名组的编号,则 该方法返回组的名称。 如果 i 是未命名组的编号,则 该方法返回该数字的字符串表示形式。 例如,如果 i 为 1,则方法返回“1”。 如果 i 不是捕获组的编号,则 方法返回 String.Empty

如果找到模式匹配项,则此方法返回的值可用于从 GroupCollection.Item[] 属性检索Group表示捕获组的对象。 对象 GroupCollectionMatch.Groups 属性返回。

适用于

另请参阅