Udostępnij za pośrednictwem


Regex.GetGroupNumbers Metoda

Definicja

Zwraca tablicę przechwytujących numery grup odpowiadające nazwom grup w tablicy.

public:
 cli::array <int> ^ GetGroupNumbers();
public int[] GetGroupNumbers ();
member this.GetGroupNumbers : unit -> int[]
Public Function GetGroupNumbers () As Integer()

Zwraca

Int32[]

Tablica całkowita liczb grupowych.

Przykłady

W poniższym przykładzie zdefiniowano wyrażenie regularne , \b((?<word>\w+)\s*)+(?<end>[.?!])które pasuje do zdania. Wyrażenie regularne zawiera trzy grupy przechwytywania: grupę bez nazwy, która przechwytuje poszczególne wyrazy wraz z znakiem spacji, który może go przestrzegać; grupa o nazwie , która przechwytuje poszczególne wyrazy w zdaniu, oraz grupę o nazwie word end , która przechwytuje znak interpunkcyjny kończący zdanie. W przykładzie metoda wywołuje metodę GetGroupNumbers , aby pobrać liczby wszystkich grup przechwytywania, a następnie wyświetli przechwycony ciąg. Ponadto metoda służy do wskazywania, GroupNameFromNumber czy określona grupa numerowana odpowiada nazwanej grupie.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string pattern = @"\b((?<word>\w+)\s*)+(?<end>[.?!])";
      string input = "This is a sentence. This is a second sentence.";
      
      Regex rgx = new Regex(pattern);
      int[] groupNumbers = rgx.GetGroupNumbers();
      Match m = rgx.Match(input);
      if (m.Success) {
         Console.WriteLine("Match: {0}", m.Value);
         foreach (var groupNumber in groupNumbers) {
            string name = rgx.GroupNameFromNumber(groupNumber);
            int number;
            Console.WriteLine("   Group {0}{1}: '{2}'", 
                              groupNumber, 
                              ! string.IsNullOrEmpty(name) & 
                              ! Int32.TryParse(name, out number) ?
                                 " (" + name + ")" : String.Empty, 
                              m.Groups[groupNumber].Value);
         }
      } 
   }
}
// The example displays the following output:
//       Match: This is a sentence.
//          Group 0: 'This is a sentence.'
//          Group 1: 'sentence'
//          Group 2 (word): 'sentence'
//          Group 3 (end): '.'
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim pattern As String= "\b((?<word>\w+)\s*)+(?<end>[.?!])"
      Dim input As String = "This is a sentence. This is a second sentence."
      
      Dim rgx As New Regex(pattern)
      Dim groupNumbers() As Integer = rgx.GetGroupNumbers()
      Dim m As Match = rgx.Match(input)
      If m.Success Then
         Console.WriteLine("Match: {0}", m.Value)
         For Each groupNumber In groupNumbers
            Dim name As String = rgx.GroupNameFromNumber(groupNumber)
            Dim number As Integer
            Console.WriteLine("   Group {0}{1}: '{2}'", 
                              groupNumber, 
                              If(Not String.IsNullOrEmpty(name) And 
                              Not Int32.TryParse(name, number),
                                 " (" + name + ")", String.Empty), 
                              m.Groups(groupNumber).Value)
         Next
      End If 
   End Sub
End Module
' The example displays the following output:
'       Match: This is a sentence.
'          Group 0: 'This is a sentence.'
'          Group 1: 'sentence'
'          Group 2 (word): 'sentence'
'          Group 3 (end): '.'

Wzorzec wyrażenia regularnego jest interpretowany, jak pokazano w poniższej tabeli.

Wzorce Opis
\b Rozpoczyna dopasowanie na granicy wyrazu.
(?<word>\w+) Dopasuj co najmniej jeden znak słowa i przypisz dopasowane ciągi do grupy o nazwie word.
\s* Dopasowanie do zera lub większej liczby znaków odstępu.
((?<word>\w+)\s*) Przypisz przechwyconą grupę word , a następnie wszystkie przechwycone białe znaki do pierwszej przechwyconej grupy.
((?<word>\w+)\s*)+ Dopasuj wzorzec co najmniej jednego znaku słowa, po którym następuje co najmniej jeden znak odstępu.
(?<end>[.?!]) Dopasowanie do kropki, znaku zapytania lub wykrzyknika. Przypisz dopasowany znak do grupy przechwytywania end .

Uwagi

Dostęp do grup przechwytywania nienazwanych i nazwanych można uzyskać za pomocą liczby. Grupy nienazwane są numerowane od lewej do prawej od 1. (Grupa przechwytywania w indeksie 0 (zero) reprezentuje dopasowanie jako całość. Nazwane grupy są następnie numerowane od lewej do prawej, zaczynając od liczby, która jest większa niż liczba nienazwanych grup przechwytywania.

Odwoływanie się do grupy według jej liczby zamiast według nazwy ciągu może zapewnić szybszy dostęp.

Dotyczy

Zobacz też