Regex.GetGroupNumbers Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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.