Regex.GroupNameFromNumber(Int32) Metoda

Definicja

Pobiera nazwę grupy odpowiadającą określonej liczbie grup.

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

Parametry

i
Int32

Numer grupy, który ma być konwertowany na odpowiednią nazwę grupy.

Zwraca

Ciąg zawierający nazwę grupy skojarzona z określonym numerem grupy. Jeśli nie ma nazwy grupy odpowiadającej metodzie i, metoda zwraca wartość Empty.

Przykłady

W poniższym przykładzie zdefiniowano wzorzec wyrażenia regularnego, który pasuje do wiersza adresu zawierającego nazwę miasta USA, nazwę stanu i kod pocztowy. W przykładzie użyto GroupNameFromNumber metody w celu pobrania nazw przechwytujących grup. Następnie używa tych nazw do pobierania odpowiednich przechwyconych grup dla dopasowań.

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.

Wzorzec wyrażenia regularnego jest definiowany przez następujące wyrażenie:

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

W poniższej tabeli przedstawiono sposób interpretowania wzorca wyrażenia regularnego.

Wzorce Opis
(?<city>[A-Za-z\s]+) Dopasuj co najmniej jeden znak alfabetyczny lub biały. Przypisz tę przechwyconą grupę jako nazwę city.
, Dopasuj przecinek (,), po którym następuje znak odstępu.
(?<state>[A-Za-z]{2}) Dopasuj dwa znaki alfabetyczne. Przypisz tę przechwyconą grupę jako nazwę state. Po tej grupie powinien znajdować się znak odstępu.
(?<zip>\d{5}(-\d{4})?) Dopasuj pięć cyfr liczbowych, po których następuje zero lub jedno wystąpienie łącznika, po którym następują cztery cyfry. Przypisz tę przechwyconą grupę jako nazwę zip.

Uwagi

Wzorzec wyrażenia regularnego może zawierać nazwane lub numerowane grupy przechwytywania, które delineują podwyrażenia w ramach dopasowania wzorca. Ponumerowane grupy są rozdzielane składnią (podwyrażeniem) i są przypisywane liczby na podstawie ich kolejności w wyrażeniu regularnym. Nazwane grupy są rozdzielane składnią (?<Nazwa>podyrażenie) lub (?") name'subexpression), gdzie nazwa jest nazwą, za pomocą której zostanie zidentyfikowane podwyrażenie. (Aby uzyskać więcej informacji, zobacz Grupowanie konstrukcji). Metoda GroupNameFromNumber identyfikuje zarówno nazwane grupy, jak i grupy numerowane według ich pozycji porządkowych w wyrażeniu regularnym. Pozycja porządkowa zero zawsze reprezentuje całe wyrażenie regularne. Wszystkie ponumerowane grupy są następnie liczone przed nazwami grupami, niezależnie od ich rzeczywistej pozycji we wzorcu wyrażenia regularnego.

Jeśli i jest liczbą nazwanej grupy, metoda zwraca nazwę grupy. Jeśli i jest liczbą nienazwanych grup, metoda zwraca reprezentację ciągu liczby. Na przykład jeśli i wartość to 1, metoda zwraca wartość "1". Jeśli i nie jest liczbą grupy przechwytywania, metoda zwraca wartość String.Empty.

Jeśli zostanie znalezione dopasowanie wzorca, wartość zwrócona przez tę metodę może służyć do pobrania Group obiektu reprezentującego przechwyconą grupę GroupCollection.Item[] z właściwości . Obiekt GroupCollection jest zwracany przez Match.Groups właściwość .

Dotyczy

Zobacz też