Подстановки в регулярных выраженияхSubstitutions in Regular Expressions

Подстановки — это языковые элементы, которые распознаются только в шаблонах замены.Substitutions are language elements that are recognized only within replacement patterns. Они используют шаблон регулярного выражения для определения всего текста или его части, предназначенной для замены совпадающего текста во входной строке.They use a regular expression pattern to define all or part of the text that is to replace matched text in the input string. Шаблон замены может включать одну или несколько подстановок вместе с литеральными символами.The replacement pattern can consist of one or more substitutions along with literal characters. Для перегруженных версий метода Regex.Replace , имеющих параметр replacement , и для метода Match.Result предоставляются шаблоны замены.Replacement patterns are provided to overloads of the Regex.Replace method that have a replacement parameter and to the Match.Result method. Эти методы заменяют совпавший шаблон шаблоном, определенным параметром replacement .The methods replace the matched pattern with the pattern that is defined by the replacement parameter.

Платформа .NET Framework определяет элементы подстановки, перечисленные в следующей таблице.The .NET Framework defines the substitution elements listed in the following table.

ПодстановкаSubstitution ОписаниеDescription
$ число$ number Включает в строку замены последнюю подстроку, соответствующую группе записи, которая идентифицируется как number, где number — десятичное значение.Includes the last substring matched by the capturing group that is identified by number, where number is a decimal value, in the replacement string. Дополнительные сведения см. в разделе Подстановка нумерованной группы.For more information, see Substituting a Numbered Group.
${ name }${ name } Включает в строку замены последнюю подстроку, соответствующую именованной группе, обозначаемой как (?<name> ) .Includes the last substring matched by the named group that is designated by (?<name> ) in the replacement string. Дополнительные сведения см. в разделе Подстановка именованной группы.For more information, see Substituting a Named Group.
$$ Включает один литерал "$" в строку замены.Includes a single "$" literal in the replacement string. Дополнительные сведения см. в разделе Подстановка символа "$".For more information, see Substituting a "$" Symbol.
$& Включает копию всего соответствия в строку замены.Includes a copy of the entire match in the replacement string. Дополнительные сведения см. в разделе Подстановка всего соответствия.For more information, see Substituting the Entire Match.
$` Включает весь текст входной строки до соответствия в строку замены.Includes all the text of the input string before the match in the replacement string. Дополнительные сведения см. в разделе Подстановка текста до соответствия.For more information, see Substituting the Text before the Match.
$'$' Включает весь текст входной строки после соответствия в строку замены.Includes all the text of the input string after the match in the replacement string. Дополнительные сведения см. в разделе Подстановка текста после соответствия.For more information, see Substituting the Text after the Match.
$+ Включает последнюю записанную группу в строку замены.Includes the last group captured in the replacement string. Дополнительные сведения см. в разделе Подстановка последней записанной группы.For more information, see Substituting the Last Captured Group.
$$ Включает всю входную строку в строку замены.Includes the entire input string in the replacement string. Дополнительные сведения см. в разделе Замена всей входной строки.For more information, see Substituting the Entire Input String.

Элементы подстановки и шаблонов заменыSubstitution Elements and Replacement Patterns

В шаблонах замены распознается только одна специальная конструкция: подстановки.Substitutions are the only special constructs recognized in a replacement pattern. Ни один из остальных элементов языка регулярных выражений, включая escape-символы и точку (.), которая соответствует любому знаку, не поддерживается.None of the other regular expression language elements, including character escapes and the period (.), which matches any character, are supported. Аналогичным образом, подставляемые элементы языка распознаются только в шаблонах замены и никогда не являются допустимыми в шаблоны регулярных выражений.Similarly, substitution language elements are recognized only in replacement patterns and are never valid in regular expression patterns.

Единственный знак, который может встречаться в шаблоне регулярного выражения либо в подстановке, — это знак $ , хотя он в разных случаях имеет разное значение.The only character that can appear either in a regular expression pattern or in a substitution is the $ character, although it has a different meaning in each context. В шаблоне регулярного выражения $ является привязкой, совпадающей с концом строки.In a regular expression pattern, $ is an anchor that matches the end of the string. В шаблоне замены $ указывает начало подстановки.In a replacement pattern, $ indicates the beginning of a substitution.

Примечание

Для получения возможностей, подобных шаблону замены в регулярном выражении, используйте обратную ссылку.For functionality similar to a replacement pattern within a regular expression, use a backreference. Дополнительные сведения об обратных ссылках см. в разделе Конструкции обратных ссылок.For more information about backreferences, see Backreference Constructs.

Подстановка нумерованной группыSubstituting a Numbered Group

Языковой элемент $number включает последнюю подстроку, сопоставленную по группе записи number в строке замены, где number — это индекс группы записи.The $number language element includes the last substring matched by the number capturing group in the replacement string, where number is the index of the capturing group. Например, шаблон замены $1 указывает, что совпадающая подстрока будет заменена первой группой записи.For example, the replacement pattern $1 indicates that the matched substring is to be replaced by the first captured group. Дополнительные сведения о нумерованных группах записи см. в разделе Grouping Constructs.For more information about numbered capturing groups, see Grouping Constructs.

Все цифры, указанные после $ , интерпретируются как относящиеся к группе number .All digits that follow $ are interpreted as belonging to the number group. Если это не соответствует вашим намерениям, можно вместо этого подставить именованную группу.If this is not your intent, you can substitute a named group instead. Например, можно использовать строку замены ${1}1 вместо $11 , чтобы определить строку замены как значение первой записанной группы вместе с номером "1".For example, you can use the replacement string ${1}1 instead of $11 to define the replacement string as the value of the first captured group along with the number "1". Дополнительные сведения см. в разделе Подстановка именованной группы.For more information, see Substituting a Named Group.

Группы записи, которым явно не назначены имена с помощью синтаксиса (?<name>) , нумеруются слева направо, начиная с единицы.Capturing groups that are not explicitly assigned names using the (?<name>) syntax are numbered from left to right starting at one. Именованные группы также нумеруются слева направо, начиная с номера, превышающего индекс последней неименованной группы.Named groups are also numbered from left to right, starting at one greater than the index of the last unnamed group. Например, в регулярном выражении (\w)(?<digit>\d)индекс именованной группы digit — 2.For example, in the regular expression (\w)(?<digit>\d), the index of the digit named group is 2.

Если number не соответствует допустимой группе записи, определенной в шаблоне регулярного выражения, $number интерпретируется как последовательность литеральных символов, используемая для замены каждого соответствия.If number does not specify a valid capturing group defined in the regular expression pattern, $number is interpreted as a literal character sequence that is used to replace each match.

В следующем примере подстановка $number используется для удаления символа валюты из десятичного значения.The following example uses the $number substitution to strip the currency symbol from a decimal value. Она удаляет символы денежной единицы, найденные в начале или конце денежного значения, и распознает два наиболее распространенных десятичных разделителя ("." и ",").It removes currency symbols found at the beginning or end of a monetary value, and recognizes the two most common decimal separators ("." and ",").

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string pattern = @"\p{Sc}*(\s?\d+[.,]?\d*)\p{Sc}*";
      string replacement = "$1";
      string input = "$16.32 12.19 £16.29 €18.29  €18,29";
      string result = Regex.Replace(input, pattern, replacement);
      Console.WriteLine(result);
   }
}
// The example displays the following output:
//       16.32 12.19 16.29 18.29  18,29
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim pattern As String = "\p{Sc}*(\s?\d+[.,]?\d*)\p{Sc}*"
      Dim replacement As String = "$1"
      Dim input As String = "$16.32 12.19 £16.29 €18.29  €18,29"
      Dim result As String = Regex.Replace(input, pattern, replacement)
      Console.WriteLine(result)
   End Sub
End Module
' The example displays the following output:
'       16.32 12.19 16.29 18.29  18,29

Шаблон регулярного выражения \p{Sc}*(\s?\d+[.,]?\d*)\p{Sc}* определяется, как показано в следующей таблице.The regular expression pattern \p{Sc}*(\s?\d+[.,]?\d*)\p{Sc}* is defined as shown in the following table.

ШаблонPattern ОписаниеDescription
\p{Sc}* Совпадение с нулем или более символами денежной единицы.Match zero or more currency symbol characters.
\s? Совпадение с нулем или одним символом пробела.Match zero or one white-space characters.
\d+ Совпадение с одной или несколькими десятичными цифрами.Match one or more decimal digits.
[.,]? Совпадение с нулем или одной точкой либо запятой.Match zero or one period or comma.
\d* Соответствует нулю или нескольким десятичным числам.Match zero or more decimal digits.
(\s?\d+[.,]?\d*) Совпадение с пробелом, за которым следует одна или несколько десятичных цифр, после которых идет ноль или одна точка либо запятая, а за ними — ноль или более десятичных цифр.Match a white space followed by one or more decimal digits, followed by zero or one period or comma, followed by zero or more decimal digits. Это первая группа записи.This is the first capturing group. Так как шаблон замены имеет вид $1, вызов метода Regex.Replace заменяет всю совпадающую подстроку данной группой записи.Because the replacement pattern is $1, the call to the Regex.Replace method replaces the entire matched substring with this captured group.

К началуBack to top

Подстановка именованной группыSubstituting a Named Group

Языковой элемент ${name} замещает последнюю подстроку, сопоставленную по группе записи name , где name — это имя группы записи, определенной в языковом элементе (?<name>) .The ${name} language element substitutes the last substring matched by the name capturing group, where name is the name of a capturing group defined by the (?<name>) language element. Дополнительные сведения об именованных группах записи см. в разделе Grouping Constructs.For more information about named capturing groups, see Grouping Constructs.

Если name не соответствует допустимой именованной группе записи, определенной в регулярном выражении, и состоит из цифр, то ${name} интерпретируется как нумерованная группа.If name doesn't specify a valid named capturing group defined in the regular expression pattern but consists of digits, ${name} is interpreted as a numbered group.

Если name не соответствует ни допустимой именованной группе записи, ни допустимой нумерованной группе записи, определенной в шаблоне регулярного выражения, ${name} интерпретируется как последовательность литеральных символов, используемая для замены каждого соответствия.If name specifies neither a valid named capturing group nor a valid numbered capturing group defined in the regular expression pattern, ${name} is interpreted as a literal character sequence that is used to replace each match.

В следующем примере подстановка ${name} используется для удаления символа валюты из десятичного значения.The following example uses the ${name} substitution to strip the currency symbol from a decimal value. Она удаляет символы денежной единицы, найденные в начале или конце денежного значения, и распознает два наиболее распространенных десятичных разделителя ("." и ",").It removes currency symbols found at the beginning or end of a monetary value, and recognizes the two most common decimal separators ("." and ",").

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string pattern = @"\p{Sc}*(?<amount>\s?\d+[.,]?\d*)\p{Sc}*";
      string replacement = "${amount}";
      string input = "$16.32 12.19 £16.29 €18.29  €18,29";
      string result = Regex.Replace(input, pattern, replacement);
      Console.WriteLine(result);
   }
}
// The example displays the following output:
//       16.32 12.19 16.29 18.29  18,29
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim pattern As String = "\p{Sc}*(?<amount>\s?\d+[.,]?\d*)\p{Sc}*"
      Dim replacement As String = "${amount}"
      Dim input As String = "$16.32 12.19 £16.29 €18.29  €18,29"
      Dim result As String = Regex.Replace(input, pattern, replacement)
      Console.WriteLine(result)
   End Sub
End Module
' The example displays the following output:
'       16.32 12.19 16.29 18.29  18,29

Шаблон регулярного выражения \p{Sc}*(?<amount>\s?\d[.,]?\d*)\p{Sc}* определяется, как показано в следующей таблице.The regular expression pattern \p{Sc}*(?<amount>\s?\d[.,]?\d*)\p{Sc}* is defined as shown in the following table.

ШаблонPattern ОписаниеDescription
\p{Sc}* Совпадение с нулем или более символами денежной единицы.Match zero or more currency symbol characters.
\s? Совпадение с нулем или одним символом пробела.Match zero or one white-space characters.
\d+ Совпадение с одной или несколькими десятичными цифрами.Match one or more decimal digits.
[.,]? Совпадение с нулем или одной точкой либо запятой.Match zero or one period or comma.
\d* Соответствует нулю или нескольким десятичным числам.Match zero or more decimal digits.
(?<amount>\s?\d[.,]?\d*) Совпадение с пробелом, за которым следует одна или несколько десятичных цифр, после которых идет ноль или одна точка либо запятая, а за ними — ноль или более десятичных цифр.Match a white space, followed by one or more decimal digits, followed by zero or one period or comma, followed by zero or more decimal digits. Это группа записи с именем amount.This is the capturing group named amount. Так как шаблон замены имеет вид ${amount}, вызов метода Regex.Replace заменяет всю совпадающую подстроку данной группой записи.Because the replacement pattern is ${amount}, the call to the Regex.Replace method replaces the entire matched substring with this captured group.

К началуBack to top

Подстановка знака "$"Substituting a "$" Character

Подстановка $$ вставляет символ литерала "$"в строку замены.The $$ substitution inserts a literal "$" character in the replaced string.

В следующем примере объект NumberFormatInfo используется для определения символа валюты для текущего языка и региональных параметров и его размещения в строке валюты.The following example uses the NumberFormatInfo object to determine the current culture's currency symbol and its placement in a currency string. Затем он динамически создает как шаблон регулярного выражения, так и шаблон замены.It then builds both a regular expression pattern and a replacement pattern dynamically. Если пример выполняется на компьютере, где в качестве языка и региональных параметров задано значение «Английский — США» (en-US), будет создан шаблон регулярного выражения \b(\d+)(\.(\d+))? и шаблон замены $$ $1$2.If the example is run on a computer whose current culture is en-US, it generates the regular expression pattern \b(\d+)(\.(\d+))? and the replacement pattern $$ $1$2. Шаблон замены замещает совпавший текст символом валюты и пробелом после первой и второй записанной группы.The replacement pattern replaces the matched text with a currency symbol and a space followed by the first and second captured groups.

using System;
using System.Globalization;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      // Define array of decimal values.
      string[] values= { "16.35", "19.72", "1234", "0.99"};
      // Determine whether currency precedes (True) or follows (False) number.
      bool precedes = NumberFormatInfo.CurrentInfo.CurrencyPositivePattern % 2 == 0;
      // Get decimal separator.
      string cSeparator = NumberFormatInfo.CurrentInfo.CurrencyDecimalSeparator;
      // Get currency symbol.
      string symbol = NumberFormatInfo.CurrentInfo.CurrencySymbol;
      // If symbol is a "$", add an extra "$".
      if (symbol == "$") symbol = "$$";
      
      // Define regular expression pattern and replacement string.
      string pattern = @"\b(\d+)(" + cSeparator + @"(\d+))?"; 
      string replacement = "$1$2";
      replacement = precedes ? symbol + " " + replacement : replacement + " " + symbol;
      foreach (string value in values)
         Console.WriteLine("{0} --> {1}", value, Regex.Replace(value, pattern, replacement));
   }
}
// The example displays the following output:
//       16.35 --> $ 16.35
//       19.72 --> $ 19.72
//       1234 --> $ 1234
//       0.99 --> $ 0.99
Imports System.Globalization
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      ' Define array of decimal values.
      Dim values() As String = { "16.35", "19.72", "1234", "0.99"}
      ' Determine whether currency precedes (True) or follows (False) number.
      Dim precedes As Boolean = (NumberFormatInfo.CurrentInfo.CurrencyPositivePattern Mod 2 = 0)
      ' Get decimal separator.
      Dim cSeparator As String = NumberFormatInfo.CurrentInfo.CurrencyDecimalSeparator
      ' Get currency symbol.
      Dim symbol As String = NumberFormatInfo.CurrentInfo.CurrencySymbol
      ' If symbol is a "$", add an extra "$".
      If symbol = "$" Then symbol = "$$"
      
      ' Define regular expression pattern and replacement string.
      Dim pattern As String = "\b(\d+)(" + cSeparator + "(\d+))?" 
      Dim replacement As String = "$1$2"
      replacement = If(precedes, symbol + " " + replacement, replacement + " " + symbol)
      For Each value In values
         Console.WriteLine("{0} --> {1}", value, Regex.Replace(value, pattern, replacement))
      Next
   End Sub
End Module
' The example displays the following output:
'       16.35 --> $ 16.35
'       19.72 --> $ 19.72
'       1234 --> $ 1234
'       0.99 --> $ 0.99

Шаблон регулярного выражения \b(\d+)(\.(\d+))? определяется, как показано в следующей таблице.The regular expression pattern \b(\d+)(\.(\d+))? is defined as shown in the following table.

ШаблонPattern ОписаниеDescription
\b Начало соответствия в начале границы слова.Start the match at the beginning of a word boundary.
(\d+) Совпадение с одной или несколькими десятичными цифрами.Match one or more decimal digits. Это первая группа записи.This is the first capturing group.
\. Совпадение с точкой (десятичным разделителем).Match a period (the decimal separator).
(\d+) Совпадение с одной или несколькими десятичными цифрами.Match one or more decimal digits. Это третья группа записи.This is the third capturing group.
(\.(\d+))? Совпадение с нулем или одним вхождением точки, за которой следует одна или несколько десятичных цифр.Match zero or one occurrence of a period followed by one or more decimal digits. Это вторая группа записи.This is the second capturing group.

Подстановка всего соответствияSubstituting the Entire Match

Подстановка $& включает все соответствие в строку замены.The $& substitution includes the entire match in the replacement string. Часто она используется для добавления подстроки в начало или в конец совпадающей строки.Often, it is used to add a substring to the beginning or end of the matched string. Например, шаблон замены ($&) добавляет скобки в начало и в конец каждого соответствия.For example, the ($&) replacement pattern adds parentheses to the beginning and end of each match. Если нет соответствия, подстановка $& не оказывает влияния.If there is no match, the $& substitution has no effect.

В следующем примере используется подстановка $& для добавления кавычек в начало и в конец названий книг, хранящихся в строковом массиве.The following example uses the $& substitution to add quotation marks at the beginning and end of book titles stored in a string array.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string pattern = @"^(\w+\s?)+$";
      string[] titles = { "A Tale of Two Cities", 
                          "The Hound of the Baskervilles", 
                          "The Protestant Ethic and the Spirit of Capitalism", 
                          "The Origin of Species" };
      string replacement = "\"$&\"";
      foreach (string title in titles)
         Console.WriteLine(Regex.Replace(title, pattern, replacement));
   }
}
// The example displays the following output:
//       "A Tale of Two Cities"
//       "The Hound of the Baskervilles"
//       "The Protestant Ethic and the Spirit of Capitalism"
//       "The Origin of Species"
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim pattern As String = "^(\w+\s?)+$"
      Dim titles() As String = { "A Tale of Two Cities", _
                                 "The Hound of the Baskervilles", _
                                 "The Protestant Ethic and the Spirit of Capitalism", _
                                 "The Origin of Species" }
      Dim replacement As String = """$&"""
      For Each title As String In titles
         Console.WriteLine(Regex.Replace(title, pattern, replacement))
      Next  
   End Sub
End Module
' The example displays the following output:
'       "A Tale of Two Cities"
'       "The Hound of the Baskervilles"
'       "The Protestant Ethic and the Spirit of Capitalism"
'       "The Origin of Species"

Шаблон регулярного выражения ^(\w+\s?)+$ определяется, как показано в следующей таблице.The regular expression pattern ^(\w+\s?)+$ is defined as shown in the following table.

ШаблонPattern ОписаниеDescription
^ Начало соответствия в начале входной строки.Start the match at the beginning of the input string.
(\w+\s?)+ Выделяет один или несколько раз шаблон из одного или нескольких словообразующих символов, за которыми следует ноль или один символ пробела.Match the pattern of one or more word characters followed by zero or one white-space characters one or more times.
$ Соответствует концу входной строки.Match the end of the input string.

Шаблон замены "$&" добавляет литеральные кавычки в начало и в конец каждого соответствия.The "$&" replacement pattern adds a literal quotation mark to the beginning and end of each match.

К началуBack to top

Подстановка текста до соответствияSubstituting the Text Before the Match

Подстановка $` заменяет совпадающую строку всей входной строкой до соответствия.The $` substitution replaces the matched string with the entire input string before the match. То есть она дублирует входную строку вплоть до соответствия, удаляя совпадающий текст.That is, it duplicates the input string up to the match while removing the matched text. Любой текст, следующий за совпадающим текстом, не изменяется в результирующей строке.Any text that follows the matched text is unchanged in the result string. Если во входной строке несколько соответствий, текст замены выводится из исходной входной строки, а не из строки, в которой текст был заменен более ранними совпадениями.If there are multiple matches in an input string, the replacement text is derived from the original input string, rather than from the string in which text has been replaced by earlier matches. (Иллюстрация приведена в примере.) Если нет соответствия, подстановка $` не оказывает влияния.(The example provides an illustration.) If there is no match, the $` substitution has no effect.

В следующем примере шаблон регулярного выражения \d+ используется для сопоставления последовательности из одной или нескольких цифр десятичного числа во входной строке.The following example uses the regular expression pattern \d+ to match a sequence of one or more decimal digits in the input string. Строка замены $` заменяет эти цифры текстом, который предшествует совпадению.The replacement string $` replaces these digits with the text that precedes the match.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string input = "aa1bb2cc3dd4ee5";
      string pattern = @"\d+";
      string substitution = "$`";
      Console.WriteLine("Matches:");
      foreach (Match match in Regex.Matches(input, pattern))
         Console.WriteLine("   {0} at position {1}", match.Value, match.Index);

      Console.WriteLine("Input string:  {0}", input);
      Console.WriteLine("Output string: " + 
                        Regex.Replace(input, pattern, substitution));
   }
}
// The example displays the following output:
//    Matches:
//       1 at position 2
//       2 at position 5
//       3 at position 8
//       4 at position 11
//       5 at position 14
//    Input string:  aa1bb2cc3dd4ee5
//    Output string: aaaabbaa1bbccaa1bb2ccddaa1bb2cc3ddeeaa1bb2cc3dd4ee
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim input As String = "aa1bb2cc3dd4ee5"
      Dim pattern As String = "\d+"
      Dim substitution As String = "$`"
      Console.WriteLine("Matches:")
      For Each match As Match In Regex.Matches(input, pattern)
         Console.WriteLine("   {0} at position {1}", match.Value, match.Index)
      Next   
      Console.WriteLine("Input string:  {0}", input)
      Console.WriteLine("Output string: " + _
                        Regex.Replace(input, pattern, substitution))
   End Sub
End Module
' The example displays the following output:
'    Matches:
'       1 at position 2
'       2 at position 5
'       3 at position 8
'       4 at position 11
'       5 at position 14
'    Input string:  aa1bb2cc3dd4ee5
'    Output string: aaaabbaa1bbccaa1bb2ccddaa1bb2cc3ddeeaa1bb2cc3dd4ee

В этом примере входная строка "aa1bb2cc3dd4ee5" содержит пять совпадений.In this example, the input string "aa1bb2cc3dd4ee5" contains five matches. В следующей таблице показано, как подстановка $` вызывает замену обработчиком регулярных выражений каждого соответствия во входной строке.The following table illustrates how the $` substitution causes the regular expression engine to replace each match in the input string. Вставленный текст отображается в столбце результатов полужирным шрифтом.Inserted text is shown in bold in the results column.

СоответствиеMatch ПоложениеPosition Строка до соответствияString before match Результирующая строкаResult string
11 22 aaaa aaaabb2cc3dd4ee5aaaabb2cc3dd4ee5
22 55 aa1bbaa1bb aaaabbaa1bbcc3dd4ee5aaaabbaa1bbcc3dd4ee5
33 88 aa1bb2ccaa1bb2cc aaaabbaa1bbccaa1bb2ccdd4ee5aaaabbaa1bbccaa1bb2ccdd4ee5
44 1111 aa1bb2cc3ddaa1bb2cc3dd aaaabbaa1bbccaa1bb2ccddaa1bb2cc3ddee5aaaabbaa1bbccaa1bb2ccddaa1bb2cc3ddee5
55 1414 aa1bb2cc3dd4eeaa1bb2cc3dd4ee aaaabbaa1bbccaa1bb2ccddaa1bb2cc3ddeeaa1bb2cc3dd4eeaaaabbaa1bbccaa1bb2ccddaa1bb2cc3ddeeaa1bb2cc3dd4ee

К началуBack to top

Подстановка текста после соответствияSubstituting the Text After the Match

Подстановка $' заменяет совпадающую строку всей входной строкой после соответствия.The $' substitution replaces the matched string with the entire input string after the match. То есть входная строка после соответствия дублируется с удалением совпадающего текста.That is, it duplicates the input string after the match while removing the matched text. Любой текст, который предшествует совпадающему тексту, не изменяется в результирующей строке.Any text that precedes the matched text is unchanged in the result string. Если нет соответствия, подстановка $' не оказывает влияния.If there is no match, the $' substitution has no effect.

В следующем примере шаблон регулярного выражения \d+ используется для сопоставления последовательности из одной или нескольких цифр десятичного числа во входной строке.The following example uses the regular expression pattern \d+ to match a sequence of one or more decimal digits in the input string. Строка замены $' заменяет эти цифры текстом, который следует за соответствием.The replacement string $' replaces these digits with the text that follows the match.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string input = "aa1bb2cc3dd4ee5";
      string pattern = @"\d+";
      string substitution = "$'";
      Console.WriteLine("Matches:");
      foreach (Match match in Regex.Matches(input, pattern))
         Console.WriteLine("   {0} at position {1}", match.Value, match.Index);
      Console.WriteLine("Input string:  {0}", input);
      Console.WriteLine("Output string: " + 
                        Regex.Replace(input, pattern, substitution));
   }
}
// The example displays the following output:
//    Matches:
//       1 at position 2
//       2 at position 5
//       3 at position 8
//       4 at position 11
//       5 at position 14
//    Input string:  aa1bb2cc3dd4ee5
//    Output string: aabb2cc3dd4ee5bbcc3dd4ee5ccdd4ee5ddee5ee
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim input As String = "aa1bb2cc3dd4ee5"
      Dim pattern As String = "\d+"
      Dim substitution As String = "$'"
      Console.WriteLine("Matches:")
      For Each match As Match In Regex.Matches(input, pattern)
         Console.WriteLine("   {0} at position {1}", match.Value, match.Index)
      Next   
      Console.WriteLine("Input string:  {0}", input)
      Console.WriteLine("Output string: " + _
                        Regex.Replace(input, pattern, substitution))
   End Sub
End Module
' The example displays the following output:
'    Matches:
'       1 at position 2
'       2 at position 5
'       3 at position 8
'       4 at position 11
'       5 at position 14
'    Input string:  aa1bb2cc3dd4ee5
'    Output string: aabb2cc3dd4ee5bbcc3dd4ee5ccdd4ee5ddee5ee

В этом примере входная строка "aa1bb2cc3dd4ee5" содержит пять совпадений.In this example, the input string "aa1bb2cc3dd4ee5" contains five matches. В следующей таблице показано, как подстановка $' вызывает замену обработчиком регулярных выражений каждого соответствия во входной строке.The following table illustrates how the $' substitution causes the regular expression engine to replace each match in the input string. Вставленный текст отображается в столбце результатов полужирным шрифтом.Inserted text is shown in bold in the results column.

СоответствиеMatch ПоложениеPosition Строка после соответствияString after match Результирующая строкаResult string
11 22 bb2cc3dd4ee5bb2cc3dd4ee5 aabb2cc3dd4ee5bb2cc3dd4ee5aabb2cc3dd4ee5bb2cc3dd4ee5
22 55 cc3dd4ee5cc3dd4ee5 aabb2cc3dd4ee5bbcc3dd4ee5cc3dd4ee5aabb2cc3dd4ee5bbcc3dd4ee5cc3dd4ee5
33 88 dd4ee5dd4ee5 aabb2cc3dd4ee5bbcc3dd4ee5ccdd4ee5dd4ee5aabb2cc3dd4ee5bbcc3dd4ee5ccdd4ee5dd4ee5
44 1111 ee5ee5 aabb2cc3dd4ee5bbcc3dd4ee5ccdd4ee5ddee5ee5aabb2cc3dd4ee5bbcc3dd4ee5ccdd4ee5ddee5ee5
55 1414 String.Empty aabb2cc3dd4ee5bbcc3dd4ee5ccdd4ee5ddee5eeaabb2cc3dd4ee5bbcc3dd4ee5ccdd4ee5ddee5ee

К началуBack to top

Подстановка последней записанной группыSubstituting the Last Captured Group

Подстановка $+ заменяет совпадающую строку всей последней группой записи.The $+ substitution replaces the matched string with the last captured group. Если группы записи отсутствуют или значение последней захваченной группы равно String.Empty, подстановка $+ не оказывает влияния.If there are no captured groups or if the value of the last captured group is String.Empty, the $+ substitution has no effect.

В следующем примере в строке определяются повторяющиеся слова и используется подстановка $+ для их замены одним вхождением слова.The following example identifies duplicate words in a string and uses the $+ substitution to replace them with a single occurrence of the word. Параметр RegexOptions.IgnoreCase позволяет убедиться, что слова, отличающиеся регистром, но идентичные во всем остальном, считаются дубликатами.The RegexOptions.IgnoreCase option is used to ensure that words that differ in case but that are otherwise identical are considered duplicates.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string pattern = @"\b(\w+)\s\1\b";
      string substitution = "$+";
      string input = "The the dog jumped over the fence fence.";
      Console.WriteLine(Regex.Replace(input, pattern, substitution, 
                        RegexOptions.IgnoreCase));
   }
}
// The example displays the following output:
//      The dog jumped over the fence.
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim pattern As String = "\b(\w+)\s\1\b"
      Dim substitution As String = "$+"
      Dim input As String = "The the dog jumped over the fence fence."
      Console.WriteLine(Regex.Replace(input, pattern, substitution, _
                                      RegexOptions.IgnoreCase))
   End Sub
End Module
' The example displays the following output:
'      The dog jumped over the fence.

Шаблон регулярного выражения \b(\w+)\s\1\b определяется, как показано в следующей таблице.The regular expression pattern \b(\w+)\s\1\b is defined as shown in the following table.

ШаблонPattern ОписаниеDescription
\b Совпадение должно начинаться на границе слова.Begin the match at a word boundary.
(\w+) Совпадение с одним или несколькими символами слова.Match one or more word characters. Это первая группа записи.This is the first capturing group.
\s Соответствует пробелу.Match a white-space character.
\1 Соответствует первой группе записи.Match the first captured group.
\b Совпадение должно заканчиваться на границе слова.End the match at a word boundary.

К началуBack to top

Замена всей входной строкиSubstituting the Entire Input String

Подстановка $_ заменяет совпадающую строку всей входной строкой.The $_ substitution replaces the matched string with the entire input string. То есть совпадающий текст удаляется и заменяется всей строкой, включая совпадающий текст.That is, it removes the matched text and replaces it with the entire string, including the matched text.

В следующем примере сопоставляется одна или несколько цифр десятичного числа во входной строке.The following example matches one or more decimal digits in the input string. При этом используется подстановка $_ для их замены входной строкой.It uses the $_ substitution to replace them with the entire input string.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string input = "ABC123DEF456";
      string pattern = @"\d+";
      string substitution = "$_";
      Console.WriteLine("Original string:          {0}", input);
      Console.WriteLine("String with substitution: {0}", 
                        Regex.Replace(input, pattern, substitution));      
   }
}
// The example displays the following output:
//       Original string:          ABC123DEF456
//       String with substitution: ABCABC123DEF456DEFABC123DEF456
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim input As String = "ABC123DEF456"
      Dim pattern As String = "\d+"
      Dim substitution As String = "$_"
      Console.WriteLine("Original string:          {0}", input)
      Console.WriteLine("String with substitution: {0}", _
                        Regex.Replace(input, pattern, substitution))      
   End Sub
End Module
' The example displays the following output:
'       Original string:          ABC123DEF456
'       String with substitution: ABCABC123DEF456DEFABC123DEF456

В этом примере входная строка "ABC123DEF456" содержит два совпадения.In this example, the input string "ABC123DEF456" contains two matches. В следующей таблице показано, как подстановка $_ вызывает замену обработчиком регулярных выражений каждого соответствия во входной строке.The following table illustrates how the $_ substitution causes the regular expression engine to replace each match in the input string. Вставленный текст отображается в столбце результатов полужирным шрифтом.Inserted text is shown in bold in the results column.

СоответствиеMatch ПоложениеPosition СоответствиеMatch Результирующая строкаResult string
11 33 123123 ABCABC123DEF456DEF456ABCABC123DEF456DEF456
22 55 456456 ABCABC123DEF456DEFABC123DEF456ABCABC123DEF456DEFABC123DEF456

См. такжеSee also