Regex.GetGroupNumbers Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Retorna uma matriz de números de grupo de captura que correspondem aos nomes de grupos em uma matriz.
public:
cli::array <int> ^ GetGroupNumbers();
public int[] GetGroupNumbers ();
member this.GetGroupNumbers : unit -> int[]
Public Function GetGroupNumbers () As Integer()
Retornos
- Int32[]
Uma matriz de inteiros de números de grupo.
Exemplos
O exemplo a seguir define uma expressão regular, \b((?<word>\w+)\s*)+(?<end>[.?!])
que corresponde a uma frase. A expressão regular inclui três grupos de captura: um grupo sem nome que captura uma palavra individual junto com um caractere de espaço que pode segui-la; um grupo chamado word
que captura as palavras individuais na frase; e um grupo nomeado end
que captura a pontuação que termina a frase. O exemplo chama o GetGroupNumbers método para obter os números de todos os grupos de captura e exibe a cadeia de caracteres capturada. Além disso, o GroupNameFromNumber método é usado para indicar se um determinado grupo numerado corresponde a um grupo nomeado.
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): '.'
O padrão da expressão regular é interpretado conforme a tabela a seguir.
Padrão | Descrição |
---|---|
\b |
Começar a correspondência em um limite de palavra. |
(?<word>\w+) |
Corresponda a um ou mais caracteres de palavra e atribua as cadeias de caracteres correspondentes a um grupo chamado word . |
\s* |
Corresponder a zero ou mais caracteres de espaço em branco. |
((?<word>\w+)\s*) |
Atribua o word grupo capturado seguido por todos os caracteres de espaço em branco capturados ao primeiro grupo capturado. |
((?<word>\w+)\s*)+ |
Corresponda ao padrão de um ou mais caracteres de palavra seguidos por qualquer caractere de espaço em branco uma ou mais vezes. |
(?<end>[.?!]) |
Corresponde a um ponto, um ponto de interrogação ou um ponto de exclamação. Atribua o caractere correspondente ao end grupo de captura. |
Comentários
Grupos de captura nomeados e sem nome podem ser acessados por número. Grupos sem nome são numerados da esquerda para a direita, começando com 1. (O grupo de captura no índice 0 (zero) representa a correspondência como um todo.) Os grupos nomeados são numerados da esquerda para a direita, começando com um número maior que o número de grupos de captura sem nome.
Referenciar um grupo por seu número em vez de pelo nome de cadeia de caracteres pode fornecer acesso mais rápido.