Regex.GetGroupNumbers Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Vrátí matici zachytávání čísel skupin, které odpovídají názvům skupin v matici.
public:
cli::array <int> ^ GetGroupNumbers();
public int[] GetGroupNumbers ();
member this.GetGroupNumbers : unit -> int[]
Public Function GetGroupNumbers () As Integer()
Návraty
- Int32[]
Celočíselná matice čísel skupin.
Příklady
Následující příklad definuje regulární výraz, \b((?<word>\w+)\s*)+(?<end>[.?!])
který odpovídá větě. Regulární výraz obsahuje tři zachytávání skupin: nepojmenovanou skupinu, která zachycuje jednotlivá slova spolu s znakem mezery, který ho může následovat; skupina s názvem word
, která zachycuje jednotlivá slova ve větě, a skupinu s názvem end
, která zachycuje interpunkci, která končí větou. Příklad volá metodu GetGroupNumbers , aby získala čísla všech zachycených skupin a pak zobrazí jejich zachycený řetězec. Kromě toho se metoda používá k označení, GroupNameFromNumber zda konkrétní číslované skupiny odpovídá pojmenované skupině.
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): '.'
Vzor regulárního výrazu je interpretován, jak je znázorněno v následující tabulce.
Vzor | Description |
---|---|
\b |
Začne porovnání na hranici slova. |
(?<word>\w+) |
Porovná jeden nebo více znaků slova a přiřadí odpovídající řetězce ke skupině s názvem word . |
\s* |
Porovná žádný nebo více prázdných znaků. |
((?<word>\w+)\s*) |
word Přiřaďte zachycenou skupinu následovanou všemi zachycenými prázdnými znaky první zachycené skupiny. |
((?<word>\w+)\s*)+ |
Porovná vzor jednoho nebo více znaků slova následovaného libovolnými prázdnými znaky jednou nebo vícekrát. |
(?<end>[.?!]) |
Porovná tečku, otazník nebo vykřičník. Přiřaďte odpovídající znak ke end skupině zachytávání. |
Poznámky
K nenázvovým i pojmenovaným zachytáváním skupin se dostanete číslem. Nepojmenované skupiny jsou číslování zleva doprava od 1. (Zachytávání skupiny v indexu 0 (nula) představuje shodu jako celek.) Pojmenované skupiny se pak očíslují zleva doprava a začínají číslem, které je větší než počet nepojmenovaných zachytávaných skupin.
Odkazování na skupinu podle čísla místo názvu řetězce může poskytnout rychlejší přístup.