Capture.Value Свойство
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Получает записанную подстроку из входной строки.
public:
property System::String ^ Value { System::String ^ get(); };
public string Value { get; }
member this.Value : string
Public ReadOnly Property Value As String
Значение свойства
Подстрока, записанная по совпадению.
Примеры
В следующем примере определяется регулярное выражение, соответствующее предложениям, не содержащим знаков препинания, за исключением точки ("."). Свойство Match.Value
отображает результирующую строку, состоящую из сопоставленного предложения, для каждого совпадения. Свойство Group.Value
отображает строку результата для каждой захватываемой группы; оно состоит из последней строки, записанной этой захватываемой группой. Свойство Capture.Value отображает строку результата для каждого захвата.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string input = "Yes. This dog is very friendly.";
string pattern = @"((\w+)[\s.])+";
foreach (Match match in Regex.Matches(input, pattern))
{
Console.WriteLine("Match: {0}", match.Value);
for (int groupCtr = 0; groupCtr < match.Groups.Count; groupCtr++)
{
Group group = match.Groups[groupCtr];
Console.WriteLine(" Group {0}: {1}", groupCtr, group.Value);
for (int captureCtr = 0; captureCtr < group.Captures.Count; captureCtr++)
Console.WriteLine(" Capture {0}: {1}", captureCtr,
group.Captures[captureCtr].Value);
}
}
}
}
// The example displays the following output:
// Match: Yes.
// Group 0: Yes.
// Capture 0: Yes.
// Group 1: Yes.
// Capture 0: Yes.
// Group 2: Yes
// Capture 0: Yes
// Match: This dog is very friendly.
// Group 0: This dog is very friendly.
// Capture 0: This dog is very friendly.
// Group 1: friendly.
// Capture 0: This
// Capture 1: dog
// Capture 2: is
// Capture 3: very
// Capture 4: friendly.
// Group 2: friendly
// Capture 0: This
// Capture 1: dog
// Capture 2: is
// Capture 3: very
// Capture 4: friendly
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim input As String = "Yes. This dog is very friendly."
Dim pattern As String = "((\w+)[\s.])+"
For Each match As Match In Regex.Matches(input, pattern)
Console.WriteLine("Match: {0}", match.Value)
For groupCtr As Integer = 0 To match.Groups.Count - 1
Dim group As Group = match.Groups(groupCtr)
Console.WriteLine(" Group {0}: {1}", groupCtr, group.Value)
For captureCtr As Integer = 0 To group.Captures.Count - 1
Console.WriteLine(" Capture {0}: {1}", captureCtr, _
group.Captures(captureCtr).Value)
Next
Next
Next
End Sub
End Module
' The example displays the following output:
' Match: Yes.
' Group 0: Yes.
' Capture 0: Yes.
' Group 1: Yes.
' Capture 0: Yes.
' Group 2: Yes
' Capture 0: Yes
' Match: This dog is very friendly.
' Group 0: This dog is very friendly.
' Capture 0: This dog is very friendly.
' Group 1: friendly.
' Capture 0: This
' Capture 1: dog
' Capture 2: is
' Capture 3: very
' Capture 4: friendly.
' Group 2: friendly
' Capture 0: This
' Capture 1: dog
' Capture 2: is
' Capture 3: very
' Capture 4: friendly
Шаблон регулярного выражения ((\w+)[\s.])+
определяется, как показано в следующей таблице. Обратите внимание, что в этом регулярном выражении квантификатор (+) применяется ко всему регулярному выражению.
Шаблон | Описание |
---|---|
(\w+) |
Совпадение с одним или несколькими символами слова. Это вторая группа записи. |
[\s.]) |
Сопоставление символа пробела или точки ("."). |
((\w+)[\s.]) |
Соответствует одному или нескольким символам слова, за которым следует пробел или точка ("."). Это первая группа записи. |
((\w+)[\s.])+ |
Сопоставление одного или нескольких вхождений символов слова или символов, за которыми следует пробел или точка ("."). |
В этом примере входная строка состоит из двух предложений. Как видно из выходных данных, первое предложение состоит только из одного слова, поэтому CaptureCollection объект имеет один Capture объект, представляющий тот же захват, что и Group объект . Второе предложение состоит из нескольких слов, поэтому Group объекты содержат только сведения о последнем сопоставлении части выражения. Группа 1, представляющая первый захват, содержит последнее слово в предложении с закрывающей точкой. Группа 2, представляющая второй захват, содержит последнее слово в предложении. Однако Capture объекты в объекте группы CaptureCollection фиксируют каждое совпадение с частью выражения. Объекты Capture в коллекции записей первой захватываемой группы содержат сведения о каждом захваченном слове и символе пробела или точке. Объекты Capture во второй коллекции записей группы записи содержат сведения о каждом захваченном слове.
В следующем примере шаблон ^([a-z]+)(\d+)*\.([a-z]+(\d)*)$
регулярного выражения используется для сопоставления номера продукта, состоящего из двух частей, разделенных точкой. Обе части состоят из алфавитных символов, за которыми следуют необязательные цифры. Поскольку первая входная строка не соответствует шаблону, значение свойства возвращаемого System.Text.RegularExpressions.Match объекта Value
равно String.Empty. Аналогичным образом, если шаблон регулярного выражения не может соответствовать захватываемой группе, значение свойства соответствующего Group объекта Value
равно String.Empty.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
String pattern = @"^([a-z]+)(\d+)?\.([a-z]+(\d)*)$";
String[] values = { "AC10", "Za203.CYM", "XYZ.CoA", "ABC.x170" };
foreach (var value in values) {
Match m = Regex.Match(value, pattern, RegexOptions.IgnoreCase);
if (m.Success) {
Console.WriteLine("Match: '{0}'", m.Value);
Console.WriteLine(" Number of Capturing Groups: {0}",
m.Groups.Count);
for (int gCtr = 0; gCtr < m.Groups.Count; gCtr++) {
Group group = m.Groups[gCtr];
Console.WriteLine(" Group {0}: {1}", gCtr,
group.Value == "" ? "<empty>" : "'" + group.Value + "'");
Console.WriteLine(" Number of Captures: {0}",
group.Captures.Count);
for (int cCtr = 0; cCtr < group.Captures.Count; cCtr++)
Console.WriteLine(" Capture {0}: {1}",
cCtr, group.Captures[cCtr].Value);
}
}
else {
Console.WriteLine("No match for {0}: Match.Value is {1}",
value, m.Value == String.Empty ? "<empty>" : m.Value);
}
}
}
}
// The example displays the following output:
// No match for AC10: Match.Value is <empty>
// Match: 'Za203.CYM'
// Number of Capturing Groups: 5
// Group 0: 'Za203.CYM'
// Number of Captures: 1
// Capture 0: Za203.CYM
// Group 1: 'Za'
// Number of Captures: 1
// Capture 0: Za
// Group 2: '203'
// Number of Captures: 1
// Capture 0: 203
// Group 3: 'CYM'
// Number of Captures: 1
// Capture 0: CYM
// Group 4: <empty>
// Number of Captures: 0
// Match: 'XYZ.CoA'
// Number of Capturing Groups: 5
// Group 0: 'XYZ.CoA'
// Number of Captures: 1
// Capture 0: XYZ.CoA
// Group 1: 'XYZ'
// Number of Captures: 1
// Capture 0: XYZ
// Group 2: <empty>
// Number of Captures: 0
// Group 3: 'CoA'
// Number of Captures: 1
// Capture 0: CoA
// Group 4: <empty>
// Number of Captures: 0
// Match: 'ABC.x170'
// Number of Capturing Groups: 5
// Group 0: 'ABC.x170'
// Number of Captures: 1
// Capture 0: ABC.x170
// Group 1: 'ABC'
// Number of Captures: 1
// Capture 0: ABC
// Group 2: <empty>
// Number of Captures: 0
// Group 3: 'x170'
// Number of Captures: 1
// Capture 0: x170
// Group 4: '0'
// Number of Captures: 3
// Capture 0: 1
// Capture 1: 7
// Capture 2: 0
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "^([a-z]+)(\d+)?\.([a-z]+(\d)*)$"
Dim values() As String = { "AC10", "Za203.CYM", "XYZ.CoA", "ABC.x170" }
For Each value In values
Dim m As Match = Regex.Match(value, pattern, RegexOptions.IgnoreCase)
If m.Success Then
Console.WriteLine("Match: '{0}'", m.Value)
Console.WriteLine(" Number of Capturing Groups: {0}",
m.Groups.Count)
For gCtr As Integer = 0 To m.Groups.Count - 1
Dim group As Group = m.Groups(gCtr)
Console.WriteLine(" Group {0}: {1}", gCtr,
If(group.Value = "", "<empty>", "'" + group.Value + "'"))
Console.WriteLine(" Number of Captures: {0}",
group.Captures.Count)
For cCtr As Integer = 0 To group.Captures.Count - 1
Console.WriteLine(" Capture {0}: {1}",
cCtr, group.Captures(cCtr).Value)
Next
Next
Else
Console.WriteLine("No match for {0}: Match.Value is {1}",
value, If(m.Value = String.Empty, "<empty>", m.Value))
End If
Next
End Sub
End Module
' The example displays the following output:
' No match for AC10: Match.Value is <empty>
' Match: 'Za203.CYM'
' Number of Capturing Groups: 5
' Group 0: 'Za203.CYM'
' Number of Captures: 1
' Capture 0: Za203.CYM
' Group 1: 'Za'
' Number of Captures: 1
' Capture 0: Za
' Group 2: '203'
' Number of Captures: 1
' Capture 0: 203
' Group 3: 'CYM'
' Number of Captures: 1
' Capture 0: CYM
' Group 4: <empty>
' Number of Captures: 0
' Match: 'XYZ.CoA'
' Number of Capturing Groups: 5
' Group 0: 'XYZ.CoA'
' Number of Captures: 1
' Capture 0: XYZ.CoA
' Group 1: 'XYZ'
' Number of Captures: 1
' Capture 0: XYZ
' Group 2: <empty>
' Number of Captures: 0
' Group 3: 'CoA'
' Number of Captures: 1
' Capture 0: CoA
' Group 4: <empty>
' Number of Captures: 0
' Match: 'ABC.x170'
' Number of Capturing Groups: 5
' Group 0: 'ABC.x170'
' Number of Captures: 1
' Capture 0: ABC.x170
' Group 1: 'ABC'
' Number of Captures: 1
' Capture 0: ABC
' Group 2: <empty>
' Number of Captures: 0
' Group 3: 'x170'
' Number of Captures: 1
' Capture 0: x170
' Group 4: '0'
' Number of Captures: 3
' Capture 0: 1
' Capture 1: 7
' Capture 2: 0
Шаблон регулярного выражения определяется, как показано в следующей таблице:
Шаблон | Описание |
---|---|
^ |
Начало совпадения в начале строки. |
([a-z]+) |
Сопоставление одного или нескольких вхождений любого символа от до z. Так как обработчику регулярных выражений RegexOptions.IgnoreCase передается параметр , это сравнение не учитывает регистр. Это первая группа записи. |
(\d+)? |
Соответствует нулю или одному вхождениям одной или нескольких десятичных цифр. Это вторая группа записи. |
\. |
Соответствует символу литеральной точки. |
([a-z]+ |
Сопоставление одного или нескольких вхождений любого символа от до z. При сравнении учитывается регистр букв. |
(\d)* |
Соответствует нулю или нескольким десятичным числам. Одна совпадающая цифра — это четвертая захватываемая группа. |
([a-z]+(\d)*) |
Совпадение с одним или несколькими буквами от до z, за которыми следуют ноль, одна или несколько десятичных цифр. Это четвертая группа записи. |
$ |
Завершите совпадение в конце строки. |
Комментарии
Если вызову Regex.Match метода или Match.NextMatch не удается найти совпадение, возвращаемое Match.Value
свойство имеет String.Emptyзначение . Если обработчик регулярных выражений не может соответствовать захватываемой группе. Значение возвращаемого Group.Value
свойства равно String.Empty. Пример см. во втором примере.