次の方法で共有


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]+) 1 つ以上の英字または空白文字と一致します。 このキャプチャされたグループに という名前 cityを割り当てます。
, コンマ (,) の後に空白文字を一致させます。
(?<state>[A-Za-z]{2}) 2 つの英字と一致します。 このキャプチャされたグループに という名前 stateを割り当てます。 このグループの後に空白文字を付ける必要があります。
(?<zip>\d{5}(-\d{4})?) 5 桁の数字の後に 0 または 1 回のハイフンの後に 4 桁の数字が続く数字と一致します。 このキャプチャされたグループに という名前 zipを割り当てます。

注釈

正規表現パターンには、パターン一致内の部分式を示す名前付きキャプチャ グループまたは番号付きキャプチャ グループが含まれる場合があります。 番号付きグループは構文 (部分式) で区切られ、正規表現内の順序に基づいて番号が割り当てられます。 名前付きグループは構文で区切られます (?<名前>subexpression)または (?'name'subexpression)、ここで name は、部分式を識別する名前です。 (詳細については、「 グループ化コンストラクト」を参照してください)。メソッドは GroupNameFromNumber 、名前付きグループと番号付きグループの両方を、正規表現内の序数で識別します。 序数位置 0 は、常に正規表現全体を表します。 その後、正規表現パターンでの実際の位置に関係なく、すべての番号付きグループは名前付きグループの前にカウントされます。

が名前付きグループの番号の場合 i 、メソッドはグループの名前を返します。 が名前のないグループの番号である場合 i 、メソッドは数値の文字列表現を返します。 たとえば、 が 1 の場合 i 、メソッドは "1" を返します。 がキャプチャ グループの数でない場合 i 、 メソッドは を返します String.Empty

パターン一致が見つかった場合、このメソッドによって返される値を使用して、 プロパティからキャプチャされたグループを表すオブジェクトをGroupCollection.Item[]取得Groupできます。 オブジェクトは GroupCollection 、 プロパティによって Match.Groups 返されます。

適用対象

こちらもご覧ください