Partilhar via


Regex.GetGroupNumbers Método

Definição

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.

Aplica-se a

Confira também