Regex.GetGroupNumbers Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает массив номеров групп записи, что соответствует именам групп в массиве.
public:
cli::array <int> ^ GetGroupNumbers();
public int[] GetGroupNumbers ();
member this.GetGroupNumbers : unit -> int[]
Public Function GetGroupNumbers () As Integer()
Возвращаемое значение
- Int32[]
Целочисленный массив номеров групп.
Примеры
В следующем примере определяется регулярное выражение, \b((?<word>\w+)\s*)+(?<end>[.?!])
соответствующее предложению. Регулярное выражение включает три группы записи: неименованная группа, которая захватывает отдельное слово вместе с пробелом, который может следовать за ним; группа с именем word
, которая фиксирует отдельные слова в предложении; и группа с именем end
, которая фиксирует знак препинания, заканчивающий предложение. В этом примере вызывается GetGroupNumbers метод для получения чисел всех захватываемых групп, а затем отображается их захваченная строка. Кроме того, метод используется для указания того, GroupNameFromNumber соответствует ли определенная нумерованная группа именованной группе.
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): '.'
Возможные интерпретации шаблона регулярного выражения показаны в следующей таблице.
Шаблон | Описание |
---|---|
\b |
Совпадение должно начинаться на границе слова. |
(?<word>\w+) |
Сопоставление одного или нескольких символов слов и назначение сопоставленных строк группе с именем word . |
\s* |
Соответствует нулю или нескольким символам пробела. |
((?<word>\w+)\s*) |
Назначьте захваченную группу word , за которой следуют все захваченные символы пробелов первой захваченной группе. |
((?<word>\w+)\s*)+ |
Соответствует шаблону одного или нескольких символов слова, за которым следует любой пробел один или несколько раз. |
(?<end>[.?!]) |
Совпадение с точкой, вопросительным знаком или восклицательным знаком. Назначьте соответствующий символ захватываемой end группе. |
Комментарии
Доступ к неименованным и именованным группам записи можно получить по номеру. Неименованные группы нумеруются слева направо, начиная с 1. (Захватываемая группа в индексе 0 (ноль) представляет соответствие в целом.) Затем именованные группы нумеруются слева направо, начиная с числа, превышающего число неименованных групп записи.
Ссылка на группу по его числу вместо имени строки может обеспечить более быстрый доступ.