Regex.Replace Regex.Replace Regex.Replace Regex.Replace Method

Определение

В указанной входной строке заменяет строки, соответствующие шаблону регулярного выражения, указанной строкой замены.In a specified input string, replaces strings that match a regular expression pattern with a specified replacement string.

Перегрузки

Replace(String, String, MatchEvaluator, RegexOptions, TimeSpan) Replace(String, String, MatchEvaluator, RegexOptions, TimeSpan) Replace(String, String, MatchEvaluator, RegexOptions, TimeSpan) Replace(String, String, MatchEvaluator, RegexOptions, TimeSpan)

В указанной входной строке заменяет все подстроки, соответствующие указанному регулярному выражению, строкой, возвращенной делегатом MatchEvaluator.In a specified input string, replaces all substrings that match a specified regular expression with a string returned by a MatchEvaluator delegate. Дополнительные параметры определяют параметры, которые изменяют соответствующую операцию и интервал времени ожидания, если совпадение не найдено.Additional parameters specify options that modify the matching operation and a time-out interval if no match is found.

Replace(String, String, String, RegexOptions, TimeSpan) Replace(String, String, String, RegexOptions, TimeSpan) Replace(String, String, String, RegexOptions, TimeSpan) Replace(String, String, String, RegexOptions, TimeSpan)

В указанной входной строке заменяет все строки, соответствующие указанному регулярному выражению, указанной строкой замены.In a specified input string, replaces all strings that match a specified regular expression with a specified replacement string. Дополнительные параметры определяют параметры, которые изменяют соответствующую операцию и интервал времени ожидания, если совпадение не найдено.Additional parameters specify options that modify the matching operation and a time-out interval if no match is found.

Replace(String, MatchEvaluator, Int32, Int32) Replace(String, MatchEvaluator, Int32, Int32) Replace(String, MatchEvaluator, Int32, Int32) Replace(String, MatchEvaluator, Int32, Int32)

В указанной входной подстроке заменяется указанное максимальное количество строк, соответствующих шаблону регулярного выражения, строкой, возвращенной делегатом MatchEvaluator.In a specified input substring, replaces a specified maximum number of strings that match a regular expression pattern with a string returned by a MatchEvaluator delegate.

Replace(String, String, MatchEvaluator, RegexOptions) Replace(String, String, MatchEvaluator, RegexOptions) Replace(String, String, MatchEvaluator, RegexOptions) Replace(String, String, MatchEvaluator, RegexOptions)

В указанной входной строке заменяет все строки, соответствующие указанному регулярному выражению, строкой, возвращенной делегатом MatchEvaluator.In a specified input string, replaces all strings that match a specified regular expression with a string returned by a MatchEvaluator delegate. Указанные параметры изменяют операцию сопоставления.Specified options modify the matching operation.

Replace(String, String, Int32, Int32) Replace(String, String, Int32, Int32) Replace(String, String, Int32, Int32) Replace(String, String, Int32, Int32)

В указанной входной подстроке заменяет указанное максимальное количество строк, соответствующих шаблону регулярного выражения, указанной строкой замены.In a specified input substring, replaces a specified maximum number of strings that match a regular expression pattern with a specified replacement string.

Replace(String, String, String, RegexOptions) Replace(String, String, String, RegexOptions) Replace(String, String, String, RegexOptions) Replace(String, String, String, RegexOptions)

В указанной входной строке заменяет все строки, соответствующие указанному регулярному выражению, указанной строкой замены.In a specified input string, replaces all strings that match a specified regular expression with a specified replacement string. Указанные параметры изменяют операцию сопоставления.Specified options modify the matching operation.

Replace(String, String, MatchEvaluator) Replace(String, String, MatchEvaluator) Replace(String, String, MatchEvaluator) Replace(String, String, MatchEvaluator)

В указанной входной строке заменяет все строки, соответствующие указанному регулярному выражению, строкой, возвращенной делегатом MatchEvaluator.In a specified input string, replaces all strings that match a specified regular expression with a string returned by a MatchEvaluator delegate.

Replace(String, String, String) Replace(String, String, String) Replace(String, String, String) Replace(String, String, String)

В указанной входной строке заменяет все строки, соответствующие указанному регулярному выражению, указанной строкой замены.In a specified input string, replaces all strings that match a specified regular expression with a specified replacement string.

Replace(String, String, Int32) Replace(String, String, Int32) Replace(String, String, Int32) Replace(String, String, Int32)

В указанной входной строке заменяет указанное максимальное количество строк, соответствующих шаблону регулярного выражения, указанной строкой замены.In a specified input string, replaces a specified maximum number of strings that match a regular expression pattern with a specified replacement string.

Replace(String, MatchEvaluator) Replace(String, MatchEvaluator) Replace(String, MatchEvaluator) Replace(String, MatchEvaluator)

В указанной входной строке заменяет все строки, соответствующие указанному регулярному выражению, строкой, возвращенной делегатом MatchEvaluator.In a specified input string, replaces all strings that match a specified regular expression with a string returned by a MatchEvaluator delegate.

Replace(String, String) Replace(String, String) Replace(String, String) Replace(String, String)

В указанной входной строке заменяет все строки, соответствующие шаблону регулярного выражения, указанной строкой замены.In a specified input string, replaces all strings that match a regular expression pattern with a specified replacement string.

Replace(String, MatchEvaluator, Int32) Replace(String, MatchEvaluator, Int32) Replace(String, MatchEvaluator, Int32) Replace(String, MatchEvaluator, Int32)

В указанной входной строке заменяется указанное максимальное количество строк, соответствующих шаблону регулярного выражения, строкой, возвращенной делегатом MatchEvaluator.In a specified input string, replaces a specified maximum number of strings that match a regular expression pattern with a string returned by a MatchEvaluator delegate.

Replace(String, String, MatchEvaluator, RegexOptions, TimeSpan) Replace(String, String, MatchEvaluator, RegexOptions, TimeSpan) Replace(String, String, MatchEvaluator, RegexOptions, TimeSpan) Replace(String, String, MatchEvaluator, RegexOptions, TimeSpan)

В указанной входной строке заменяет все подстроки, соответствующие указанному регулярному выражению, строкой, возвращенной делегатом MatchEvaluator.In a specified input string, replaces all substrings that match a specified regular expression with a string returned by a MatchEvaluator delegate. Дополнительные параметры определяют параметры, которые изменяют соответствующую операцию и интервал времени ожидания, если совпадение не найдено.Additional parameters specify options that modify the matching operation and a time-out interval if no match is found.

public:
 static System::String ^ Replace(System::String ^ input, System::String ^ pattern, System::Text::RegularExpressions::MatchEvaluator ^ evaluator, System::Text::RegularExpressions::RegexOptions options, TimeSpan matchTimeout);
public static string Replace (string input, string pattern, System.Text.RegularExpressions.MatchEvaluator evaluator, System.Text.RegularExpressions.RegexOptions options, TimeSpan matchTimeout);
static member Replace : string * string * System.Text.RegularExpressions.MatchEvaluator * System.Text.RegularExpressions.RegexOptions * TimeSpan -> string
Public Shared Function Replace (input As String, pattern As String, evaluator As MatchEvaluator, options As RegexOptions, matchTimeout As TimeSpan) As String

Параметры

input
String String String String

Строка для поиска соответствия.The string to search for a match.

pattern
String String String String

Шаблон регулярного выражения для сопоставления.The regular expression pattern to match.

evaluator
MatchEvaluator MatchEvaluator MatchEvaluator MatchEvaluator

Пользовательский метод, анализирующий каждое совпадение и возвращающий либо исходную строку с совпадениями, либо строку замены.A custom method that examines each match and returns either the original matched string or a replacement string.

options
RegexOptions RegexOptions RegexOptions RegexOptions

Побитовая комбинация значений перечисления, предоставляющих параметры для сопоставления.A bitwise combination of enumeration values that provide options for matching.

matchTimeout
TimeSpan TimeSpan TimeSpan TimeSpan

Интервал времени ожидания или InfiniteMatchTimeout, чтобы указать, что метод не должен превышать время ожидания.A time-out interval, or InfiniteMatchTimeout to indicate that the method should not time out.

Возвраты

Новая строка, идентичная входной строке, за исключением того что строка замены занимает место каждой соответствующей строки.A new string that is identical to the input string, except that the replacement string takes the place of each matched string. Если для pattern не найдено соответствия в текущем экземпляре, метод возвращает текущий экземпляр без изменений.If pattern is not matched in the current instance, the method returns the current instance unchanged.

Исключения

Произошла ошибка анализа регулярного выражения.A regular expression parsing error occurred.

Значение параметра input, pattern или evaluator равно null.input, pattern, or evaluator is null.

Параметр options не является допустимой битовой комбинацией значений RegexOptions.options is not a valid bitwise combination of RegexOptions values.

-или--or- Значение параметра matchTimeout отрицательное, равно нулю или больше, чем приблизительно 24 дня.matchTimeout is negative, zero, or greater than approximately 24 days.

Время ожидания истекло.A time-out occurred. Дополнительные сведения о времени ожидания см. в разделе "Примечания".For more information about time-outs, see the Remarks section.

Примеры

В следующем примере используется регулярное выражение для извлечения отдельных слов из строки, а затем используется MatchEvaluator делегат для вызова метода с именем WordScramble , который шифрует отдельные буквы в слове.The following example uses a regular expression to extract the individual words from a string, and then uses a MatchEvaluator delegate to call a method named WordScramble that scrambles the individual letters in the word. Для этого WordScramble метод создает массив, содержащий символы в совпадении.To do this, the WordScramble method creates an array that contains the characters in the match. Он также создает параллельный массив, который заполняется случайными числами с плавающей запятой.It also creates a parallel array that it populates with random floating-point numbers. Массивы сортируются путем вызова Array.Sort<TKey,TValue>(TKey[], TValue[], IComparer<TKey>) метода, а отсортированный массив предоставляется в качестве аргумента String конструктору класса.The arrays are sorted by calling the Array.Sort<TKey,TValue>(TKey[], TValue[], IComparer<TKey>) method, and the sorted array is provided as an argument to a String class constructor. Затем вновь созданная строка возвращается WordScramble методом.This newly created string is then returned by the WordScramble method. Шаблон \w+ регулярного выражения соответствует одному или нескольким символам слова; обработчик регулярных выражений продолжит добавлять символы к совпадению до тех пор, пока не встретится символ, отличный от слова, например пробел.The regular expression pattern \w+ matches one or more word characters; the regular expression engine will continue to add characters to the match until it encounters a non-word character, such as a white-space character. Вызов Replace(String, String, MatchEvaluator, RegexOptions) метода \w+ # Matches all the characters in a word. включает параметр, чтобы комментарий в шаблоне регулярного выражения игнорировался обработчиком регулярных выражений. RegexOptions.IgnorePatternWhitespaceThe call to the Replace(String, String, MatchEvaluator, RegexOptions) method includes the RegexOptions.IgnorePatternWhitespace option so that the comment in the regular expression pattern \w+ # Matches all the characters in a word. is ignored by the regular expression engine.

using System;
using System.Collections;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string words = "letter alphabetical missing lack release " + 
                     "penchant slack acryllic laundry cease";
      string pattern = @"\w+  # Matches all the characters in a word.";                            
      MatchEvaluator evaluator = new MatchEvaluator(WordScrambler);
      Console.WriteLine("Original words:");
      Console.WriteLine(words);
      Console.WriteLine();
      try {
         Console.WriteLine("Scrambled words:");
         Console.WriteLine(Regex.Replace(words, pattern, evaluator, 
                                         RegexOptions.IgnorePatternWhitespace,
                                         TimeSpan.FromSeconds(.25)));      
      }
      catch (RegexMatchTimeoutException) {
         Console.WriteLine("Word Scramble operation timed out.");
         Console.WriteLine("Returned words:");
      }
   }

   public static string WordScrambler(Match match)
   {
      int arraySize = match.Value.Length;
      // Define two arrays equal to the number of letters in the match.
      double[] keys = new double[arraySize];
      char[] letters = new char[arraySize];
      
      // Instantiate random number generator'
      Random rnd = new Random();
      
      for (int ctr = 0; ctr < match.Value.Length; ctr++)
      {
         // Populate the array of keys with random numbers.
         keys[ctr] = rnd.NextDouble();
         // Assign letter to array of letters.
         letters[ctr] = match.Value[ctr];
      }         
      Array.Sort(keys, letters, 0, arraySize, Comparer.Default);      
      return new String(letters);
   }
}
// The example displays output similar to the following:
//    Original words:
//    letter alphabetical missing lack release penchant slack acryllic laundry cease
//    
//    Scrambled words:
//    etlert liahepalbcat imsgsni alkc ereelsa epcnnaht lscak cayirllc alnyurd ecsae
Imports System.Collections
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim words As String = "letter alphabetical missing lack release " + _
                            "penchant slack acryllic laundry cease"
      Dim pattern As String = "\w+  # Matches all the characters in a word."                            
      Dim evaluator As MatchEvaluator = AddressOf WordScrambler
      Console.WriteLine("Original words:")
      Console.WriteLine(words)
      Try
         Console.WriteLine("Scrambled words:")
         Console.WriteLine(Regex.Replace(words, pattern, evaluator,
                                         RegexOptions.IgnorePatternWhitespace,
                                         TimeSpan.FromSeconds(.25)))      
      Catch e As RegexMatchTimeoutException
         Console.WriteLine("Word Scramble operation timed out.")
         Console.WriteLine("Returned words:")
      End Try   
   End Sub
   
   Public Function WordScrambler(match As Match) As String
      Dim arraySize As Integer = match.Value.Length - 1
      ' Define two arrays equal to the number of letters in the match.
      Dim keys(arraySize) As Double
      Dim letters(arraySize) As Char
      
      ' Instantiate random number generator'
      Dim rnd As New Random()
      
      For ctr As Integer = 0 To match.Value.Length - 1
         ' Populate the array of keys with random numbers.
         keys(ctr) = rnd.NextDouble()
         ' Assign letter to array of letters.
         letters(ctr) = match.Value.Chars(ctr)
      Next         
      Array.Sort(keys, letters, 0, arraySize, Comparer.Default)      
      Return New String(letters)
   End Function
End Module
' The example displays output similar to the following:
'    Original words:
'    letter alphabetical missing lack release penchant slack acryllic laundry cease
'    
'    Scrambled words:
'    etlert liahepalbcat imsgsni alkc ereelsa epcnnaht lscak cayirllc alnyurd ecsae

Комментарии

Regex.Replace(String, String, MatchEvaluator, RegexOptions) Метод удобен для замены соответствия регулярного выражения, если выполняется одно из следующих условий.The Regex.Replace(String, String, MatchEvaluator, RegexOptions) method is useful for replacing a regular expression match if any of the following conditions is true:

  • Если замещающая строка не может быть задана шаблоном регулярного выражения.If the replacement string cannot readily be specified by a regular expression replacement pattern.

  • Значение, если строка замены является результатом некоторой обработки, выполненной с соответствующей строкой.If the replacement string results from some processing performed on the matched string.

  • Значение, если строка замены является результатом условной обработки.If the replacement string results from conditional processing.

Метод эквивалентен вызову Regex.Matches(String, String, RegexOptions) метода и передаче каждого Match объекта в возвращенной MatchCollection коллекции evaluator делегату.The method is equivalent to calling the Regex.Matches(String, String, RegexOptions) method and passing each Match object in the returned MatchCollection collection to the evaluator delegate.

pattern Параметр состоит из элементов языка регулярных выражений, которые в символьном виде описывают строку для сопоставления.The pattern parameter consists of regular expression language elements that symbolically describe the string to match. Дополнительные сведения о регулярных выражениях см. в разделе .NET Framework регулярные выражения и Язык регулярных выражений — краткий справочник.For more information about regular expressions, see .NET Framework Regular Expressions and Regular Expression Language - Quick Reference.

evaluator Параметр является делегатом для настраиваемого метода, который определяется и проверяет каждое совпадение.The evaluator parameter is the delegate for a custom method that you define and that examines each match. Пользовательский метод должен иметь следующую сигнатуру для сопоставления MatchEvaluator с делегатом.The custom method must have the following signature to match the MatchEvaluator delegate.

public string MatchEvaluatorMethod(Match match)
Public Function MatchEvaluatorMethod(match As Match) As String

Пользовательский метод возвращает строку, которая заменяет найденные входные данные.Your custom method returns a string that replaces the matched input.

RightToLeft Еслиoptions для параметра указано значение, Поиск соответствий начинается в конце входной строки и перемещается влево; в противном случае поиск начинается с начала входной строки и перемещается вправо.If you specify RightToLeft for the options parameter, the search for matches begins at the end of the input string and moves left; otherwise, the search begins at the start of the input string and moves right.

matchTimeout Параметр указывает, как долго метод сопоставления шаблонов должен пытаться найти соответствие до истечения времени ожидания. Установка интервала времени ожидания позволяет предотвратить появление в регулярных выражениях, которые полагаются на избыточное средство поиска с возвратом, перестают отвечать при обработке входных данных, содержащих близких соответствий.The matchTimeout parameter specifies how long a pattern matching method should try to find a match before it times out. Setting a time-out interval prevents regular expressions that rely on excessive backtracking from appearing to "stop responding when they process input that contains near matches. Дополнительные сведения см. в разделе рекомендации по использованию регулярных выражений и поискас возвратом.For more information, see Best Practices for Regular Expressions and Backtracking. Если в течение этого интервала времени совпадения не найдены, метод создает RegexMatchTimeoutException исключение.If no match is found in that time interval, the method throws a RegexMatchTimeoutException exception. matchTimeoutпереопределяет любое значение времени ожидания по умолчанию, определенное для домена приложения, в котором выполняется метод.matchTimeout overrides any default time-out value defined for the application domain in which the method executes.

Поскольку метод возвращает input значение без изменений, если совпадение нет, можно Object.ReferenceEquals использовать метод, чтобы определить, выполнил ли метод какие-либо замены во входной строке.Because the method returns input unchanged if there is no match, you can use the Object.ReferenceEquals method to determine whether the method has made any replacements to the input string.

Примечания для тех, кто вызывает этот метод

Рекомендуется присвоить matchTimeout параметру соответствующее значение, например две секунды.We recommend that you set the matchTimeout parameter to an appropriate value, such as two seconds. Если вы отключаете время ожидания, указав InfiniteMatchTimeout, механизм регулярных выражений обеспечивает немного более высокую производительность.If you disable time-outs by specifying InfiniteMatchTimeout, the regular expression engine offers slightly better performance. Однако время ожидания следует отключить только при следующих условиях.However, you should disable time-outs only under the following conditions: — Если входные данные, обрабатываемые регулярным выражением, являются производными от известного и надежного источника или состоят из статического текста.- When the input processed by a regular expression is derived from a known and trusted source or consists of static text. Это исключает текст, введенный пользователями динамически.This excludes text that has been dynamically input by users.

— При тщательном тестировании шаблона регулярного выражения для обеспечения эффективной обработки совпадений, несоответствий и близких соответствий.- When the regular expression pattern has been thoroughly tested to ensure that it efficiently handles matches, non-matches, and near matches.

— Если шаблон регулярного выражения не содержит элементов языка, которые вызывают избыточный поиск с возвратом при обработке близкого соответствия.- When the regular expression pattern contains no language elements that are known to cause excessive backtracking when processing a near match.

Дополнительно

Replace(String, String, String, RegexOptions, TimeSpan) Replace(String, String, String, RegexOptions, TimeSpan) Replace(String, String, String, RegexOptions, TimeSpan) Replace(String, String, String, RegexOptions, TimeSpan)

В указанной входной строке заменяет все строки, соответствующие указанному регулярному выражению, указанной строкой замены.In a specified input string, replaces all strings that match a specified regular expression with a specified replacement string. Дополнительные параметры определяют параметры, которые изменяют соответствующую операцию и интервал времени ожидания, если совпадение не найдено.Additional parameters specify options that modify the matching operation and a time-out interval if no match is found.

public:
 static System::String ^ Replace(System::String ^ input, System::String ^ pattern, System::String ^ replacement, System::Text::RegularExpressions::RegexOptions options, TimeSpan matchTimeout);
public static string Replace (string input, string pattern, string replacement, System.Text.RegularExpressions.RegexOptions options, TimeSpan matchTimeout);
static member Replace : string * string * string * System.Text.RegularExpressions.RegexOptions * TimeSpan -> string
Public Shared Function Replace (input As String, pattern As String, replacement As String, options As RegexOptions, matchTimeout As TimeSpan) As String

Параметры

input
String String String String

Строка для поиска соответствия.The string to search for a match.

pattern
String String String String

Шаблон регулярного выражения для сопоставления.The regular expression pattern to match.

replacement
String String String String

Строка замены.The replacement string.

options
RegexOptions RegexOptions RegexOptions RegexOptions

Побитовая комбинация значений перечисления, предоставляющая параметры для сопоставления.A bitwise combination of the enumeration values that provide options for matching.

matchTimeout
TimeSpan TimeSpan TimeSpan TimeSpan

Интервал времени ожидания или InfiniteMatchTimeout, чтобы указать, что метод не должен превышать время ожидания.A time-out interval, or InfiniteMatchTimeout to indicate that the method should not time out.

Возвраты

Новая строка, идентичная входной строке, за исключением того что строка замены занимает место каждой соответствующей строки.A new string that is identical to the input string, except that the replacement string takes the place of each matched string. Если для pattern не найдено соответствия в текущем экземпляре, метод возвращает текущий экземпляр без изменений.If pattern is not matched in the current instance, the method returns the current instance unchanged.

Исключения

Произошла ошибка анализа регулярного выражения.A regular expression parsing error occurred.

Значение параметра input, pattern или replacement равно null.input, pattern, or replacement is null.

Параметр options не является допустимой битовой комбинацией значений RegexOptions.options is not a valid bitwise combination of RegexOptions values.

-или--or- Значение параметра matchTimeout отрицательное, равно нулю или больше, чем приблизительно 24 дня.matchTimeout is negative, zero, or greater than approximately 24 days.

Время ожидания истекло.A time-out occurred. Дополнительные сведения о времени ожидания см. в разделе "Примечания".For more information about time-outs, see the Remarks section.

Примеры

В следующем примере используется Replace(String, String, String, RegexOptions, TimeSpan) метод для замены имен локальных компьютеров и дисков в UNC-пути локальным путем к файлу.The following example uses the Replace(String, String, String, RegexOptions, TimeSpan) method to replace the local machine and drive names in a UNC path with a local file path. Регулярное выражение использует Environment.MachineName свойство для включения имени локального компьютера Environment.GetLogicalDrives и метода для включения имен логических дисков.The regular expression uses the Environment.MachineName property to include the name of the local computer and the Environment.GetLogicalDrives method to include the names of the logical drives. Все сравнения строк регулярного выражения не чувствительны к регистру и время ожидания одной операции замены, если соответствие не найдено в течение 0,5 секунды.All regular expression string comparisons are case-insensitive, and any single replacement operation times out if a match cannot be found in 0.5 second. Для успешного выполнения примера необходимо заменить литеральную строку "Мойкомпьютер" на имя локального компьютера.To run the example successfully, you should replace the literal string "MyMachine" with your local machine name.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      // Get drives available on local computer and form into a single character expression.
      string[] drives = Environment.GetLogicalDrives();
      string driveNames = String.Empty;
      foreach (string drive in drives)
         driveNames += drive.Substring(0,1);
      // Create regular expression pattern dynamically based on local machine information.
      string pattern = @"\\\\" + Environment.MachineName + @"(?:\.\w+)*\\([" + driveNames + @"])\$";

      string replacement = "$1:";
      string[] uncPaths = { @"\\MyMachine.domain1.mycompany.com\C$\ThingsToDo.txt", 
                            @"\\MyMachine\c$\ThingsToDo.txt", 
                            @"\\MyMachine\d$\documents\mydocument.docx" }; 
      
      foreach (string uncPath in uncPaths)
      {
         Console.WriteLine("Input string: " + uncPath);
         string localPath = null;
         try {
            localPath = Regex.Replace(uncPath, pattern, replacement, 
                                      RegexOptions.IgnoreCase,
                                      TimeSpan.FromSeconds(0.5));
            Console.WriteLine("Returned string: " + localPath);
         }
         catch (RegexMatchTimeoutException) {
            Console.WriteLine("The replace operation timed out.");
            Console.WriteLine("Returned string: " + localPath);
            if (uncPath.Equals(localPath)) 
               Console.WriteLine("Equal to original path.");
            else
               Console.WriteLine("Original string: " + uncPath);
         }
         Console.WriteLine();
      }
   }
}
// The example displays the following output if run on a machine whose name is
// MyMachine:
//    Input string: \\MyMachine.domain1.mycompany.com\C$\ThingsToTo.txt
//    Returned string: C:\ThingsToDo.txt
//    
//    Input string: \\MyMachine\c$\ThingsToDo.txt
//    Returned string: c:\ThingsToDo.txt
//    
//    Input string: \\MyMachine\d$\documents\mydocument.docx
//    Returned string: d:\documents\mydocument.docx
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      ' Get drives available on local computer and form into a single character expression.
      Dim drives() As String = Environment.GetLogicalDrives()
      Dim driveNames As String = Nothing
      For Each drive As String In drives
         driveNames += drive.Substring(0,1)
      Next
      ' Create regular expression pattern dynamically based on local machine information.
      Dim pattern As String = "\\\\" + Environment.MachineName + "(?:\.\w+)*\\([" + driveNames + "])\$"

      Dim replacement As String = "$1:"
      Dim uncPaths() AS String = {"\\MyMachine.domain1.mycompany.com\C$\ThingsToDo.txt", _
                                  "\\MyMachine\c$\ThingsToDo.txt", _
                                  "\\MyMachine\d$\documents\mydocument.docx" } 
      
      For Each uncPath As String In uncPaths
         Console.WriteLine("Input string: " + uncPath)
         Dim localPath As String = Nothing
         Try
            localPath = Regex.Replace(uncPath, pattern, replacement, 
                                                               RegexOptions.IgnoreCase,
                                                               TimeSpan.FromSeconds(0.5))
            Console.WriteLine("Returned string: " + localPath)         
         Catch e As RegexMatchTimeoutException
            Console.WriteLine("The replace operation timed out.")
            Console.WriteLine("Returned string: " + localPath)
            If uncPath.Equals(localPath) Then 
               Console.WriteLine("Equal to original path.")
            Else
               Console.WriteLine("Original string: " + uncPath)
            End If
         End Try         
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output if run on a machine whose name is
' MyMachine:
'    Input string: \\MyMachine.domain1.mycompany.com\C$\ThingsToTo.txt
'    Returned string: C:\ThingsToDo.txt
'    
'    Input string: \\MyMachine\c$\ThingsToDo.txt
'    Returned string: c:\ThingsToDo.txt
'    
'    Input string: \\MyMachine\d$\documents\mydocument.docx
'    Returned string: d:\documents\mydocument.docx

Шаблон регулярного выражения определяется следующим выражением:The regular expression pattern is defined by the following expression:

"\\\\" + Environment.MachineName + "(?:\.\w+)*\\([" + driveNames + "])\$"

В следующей таблице показано, как интерпретируется шаблон регулярного выражения.The following table shows how the regular expression pattern is interpreted.

ШаблонPattern ОписаниеDescription
\\\\ Совпадение двух последовательных\символов обратной косой черты ().\\\\ Match two consecutive backslash (\) characters. Поскольку символ обратной косой черты интерпретируется как escape-символ, каждая обратная косая черта должна быть экранирована другой обратной косой чертой.Because the backslash character is interpreted as the escape character, each backslash must be escaped with another backslash.
+ Environment.MachineName + Совпадение со строкой, возвращаемой Environment.MachineName свойством.Match the string that is returned by the Environment.MachineName property.
(?:\.\w+)* Соответствует символу точки.(), за которым следует один или несколько символов слова.Match the period (.) character followed by one or more word characters. Это совпадение может встретиться ноль или более раз.This match can occur zero or more times. Сопоставленная часть выражения не фиксируется.The matched subexpression is not captured.
\\ Совпадение с символом обратной косой черты (\).\\ Match a backslash (\) character.
([" + driveNames + "]) Соответствует классу символов, который состоит из отдельных букв диска.Match the character class that consists of the individual drive letters. Это совпадение является первой захваченной частью выражения.This match is the first captured subexpression.
\$ Совпадение с литералом знака$доллара ().Match the literal dollar sign ($) character.

Шаблон $1 замены заменяет все совпадения первой захваченной частью выражения.The replacement pattern $1 replaces the entire match with the first captured subexpression. То есть имя компьютера и диска в формате UNC заменяет букву диска.That is, it replaces the UNC machine and drive name with the drive letter.

Комментарии

Статические Replace методы эквивалентны созданию Regex объекта с указанным шаблоном регулярного выражения и вызовом метода Replaceэкземпляра.The static Replace methods are equivalent to constructing a Regex object with the specified regular expression pattern and calling the instance method Replace.

pattern Параметр состоит из элементов языка регулярных выражений, которые в символьном виде описывают строку для сопоставления.The pattern parameter consists of regular expression language elements that symbolically describe the string to match. Дополнительные сведения о регулярных выражениях см. в разделе .NET Framework регулярные выражения и Язык регулярных выражений — краткий справочник.For more information about regular expressions, see .NET Framework Regular Expressions and Regular Expression Language - Quick Reference. RightToLeft Еслиoptions для параметра указано значение, Поиск соответствий начинается в конце входной строки и перемещается влево; в противном случае поиск начинается с начала входной строки и перемещается вправо.If you specify RightToLeft for the options parameter, the search for matches begins at the end of the input string and moves left; otherwise, the search begins at the start of the input string and moves right.

Параметр указывает строку, которая будет заменять каждое совпадение inputв. replacementThe replacement parameter specifies the string that is to replace each match in input. replacementможет состоять из любого сочетания литерального текста и подстановки.replacement can consist of any combination of literal text and substitutions. Например, шаблон a*${test}b замены вставляет строку "a *", за которой следует подстрока, совпадающая test с группой записи, если она есть, за которой следует строка "b".For example, the replacement pattern a*${test}b inserts the string "a*" followed by the substring that is matched by the test capturing group, if any, followed by the string "b". Символ * не распознается как метасимвол в шаблоне замены.The * character is not recognized as a metacharacter within a replacement pattern.

Примечание

Подстановки — это единственные элементы языка регулярных выражений, распознаваемые в шаблоне замены.Substitutions are the only regular expression language elements that are recognized in a replacement pattern. Все остальные элементы языка регулярных выражений, включая escape-символы, допускаются только в шаблонах регулярных выражений и не распознаются в шаблонах замены.All other regular expression language elements, including character escapes, are allowed in regular expression patterns only and are not recognized in replacement patterns.

matchTimeout Параметр указывает, как долго метод сопоставления шаблонов должен пытаться найти соответствие до истечения времени ожидания. Установка интервала времени ожидания предотвращает зависание регулярных выражений, которые полагаются на избыточное выполнение поиска с возвратом, при обработке входных данных, содержащих близкие совпадения.The matchTimeout parameter specifies how long a pattern matching method should try to find a match before it times out. Setting a time-out interval prevents regular expressions that rely on excessive backtracking from appearing to stop responding when they process input that contains near matches. Дополнительные сведения см. в разделе рекомендации по использованию регулярных выражений и поискас возвратом.For more information, see Best Practices for Regular Expressions and Backtracking. Если в течение этого интервала времени совпадения не найдены, метод создает RegexMatchTimeoutException исключение.If no match is found in that time interval, the method throws a RegexMatchTimeoutException exception. matchTimeoutпереопределяет любое значение времени ожидания по умолчанию, определенное для домена приложения, в котором выполняется метод.matchTimeout overrides any default time-out value defined for the application domain in which the method executes.

Поскольку метод возвращает input значение без изменений, если совпадение нет, можно Object.ReferenceEquals использовать метод, чтобы определить, выполнил ли метод какие-либо замены во входной строке.Because the method returns input unchanged if there is no match, you can use the Object.ReferenceEquals method to determine whether the method has made any replacements to the input string.

Примечания для тех, кто вызывает этот метод

Рекомендуется присвоить matchTimeout параметру соответствующее значение, например две секунды.We recommend that you set the matchTimeout parameter to an appropriate value, such as two seconds. Если вы отключаете время ожидания, указав InfiniteMatchTimeout, механизм регулярных выражений обеспечивает немного более высокую производительность.If you disable time-outs by specifying InfiniteMatchTimeout, the regular expression engine offers slightly better performance. Однако время ожидания следует отключить только при следующих условиях.However, you should disable time-outs only under the following conditions: — Если входные данные, обрабатываемые регулярным выражением, являются производными от известного и надежного источника или состоят из статического текста.- When the input processed by a regular expression is derived from a known and trusted source or consists of static text. Это исключает текст, введенный пользователями динамически.This excludes text that has been dynamically input by users.

— При тщательном тестировании шаблона регулярного выражения для обеспечения эффективной обработки совпадений, несоответствий и близких соответствий.- When the regular expression pattern has been thoroughly tested to ensure that it efficiently handles matches, non-matches, and near matches.

— Если шаблон регулярного выражения не содержит элементов языка, которые вызывают избыточный поиск с возвратом при обработке близкого соответствия.- When the regular expression pattern contains no language elements that are known to cause excessive backtracking when processing a near match.

Дополнительно

Replace(String, MatchEvaluator, Int32, Int32) Replace(String, MatchEvaluator, Int32, Int32) Replace(String, MatchEvaluator, Int32, Int32) Replace(String, MatchEvaluator, Int32, Int32)

В указанной входной подстроке заменяется указанное максимальное количество строк, соответствующих шаблону регулярного выражения, строкой, возвращенной делегатом MatchEvaluator.In a specified input substring, replaces a specified maximum number of strings that match a regular expression pattern with a string returned by a MatchEvaluator delegate.

public:
 System::String ^ Replace(System::String ^ input, System::Text::RegularExpressions::MatchEvaluator ^ evaluator, int count, int startat);
public string Replace (string input, System.Text.RegularExpressions.MatchEvaluator evaluator, int count, int startat);
member this.Replace : string * System.Text.RegularExpressions.MatchEvaluator * int * int -> string
Public Function Replace (input As String, evaluator As MatchEvaluator, count As Integer, startat As Integer) As String

Параметры

input
String String String String

Строка для поиска соответствия.The string to search for a match.

evaluator
MatchEvaluator MatchEvaluator MatchEvaluator MatchEvaluator

Пользовательский метод, анализирующий каждое совпадение и возвращающий либо исходную строку с совпадениями, либо строку замены.A custom method that examines each match and returns either the original matched string or a replacement string.

count
Int32 Int32 Int32 Int32

Максимальное количество возможных случаев замены.The maximum number of times the replacement will occur.

startat
Int32 Int32 Int32 Int32

Позиция символа во входной строке, с которой начинается поиск.The character position in the input string where the search begins.

Возвраты

Новая строка, идентичная входной строке, за исключением того что строка замены занимает место каждой соответствующей строки.A new string that is identical to the input string, except that a replacement string takes the place of each matched string. Если в текущем экземпляре нет соответствия шаблону регулярных выражений, метод возвращает текущий экземпляр без изменений.If the regular expression pattern is not matched in the current instance, the method returns the current instance unchanged.

Исключения

Значение параметра input или evaluatornull.input or evaluator is null.

Параметр startat имеет значение меньше нуля или больше длины input.startat is less than zero or greater than the length of input.

Время ожидания истекло.A time-out occurred. Дополнительные сведения о времени ожидания см. в разделе "Примечания".For more information about time-outs, see the Remarks section.

Комментарии

Regex.Replace(String, MatchEvaluator, Int32, Int32) Метод удобен для замены соответствия регулярного выражения, если выполняется одно из следующих условий.The Regex.Replace(String, MatchEvaluator, Int32, Int32) method is useful for replacing a regular expression match if any of the following conditions is true:

  • Замещающая строка не может быть задается шаблоном замены регулярных выражений.The replacement string cannot readily be specified by a regular expression replacement pattern.

  • Строка замены, полученная в результате некоторой обработки в сопоставленной строке.The replacement string results from some processing done on the matched string.

  • Строка замены, полученная в результате условной обработки.The replacement string results from conditional processing.

Метод Regex.Matches(String, Int32) эквивалентен вызову метода и передаче первых Match count объектов из возвращенной MatchCollection коллекции evaluator делегату.The method is equivalent to calling the Regex.Matches(String, Int32) method and passing the first countMatch objects in the returned MatchCollection collection to the evaluator delegate.

Регулярное выражение — это шаблон, определяемый конструктором для текущего Regex объекта.The regular expression is the pattern defined by the constructor for the current Regex object.

evaluator Параметр является делегатом для настраиваемого метода, который определяется и проверяет каждое совпадение.The evaluator parameter is the delegate for a custom method that you define and that examines each match. Пользовательский метод должен иметь следующую сигнатуру для сопоставления MatchEvaluator с делегатом.The custom method must have the following signature to match the MatchEvaluator delegate.

public string MatchEvaluatorMethod(Match match)
Public Function MatchEvaluatorMethod(match As Match) As String

Пользовательский метод возвращает строку, которая заменяет найденные входные данные.Your custom method returns a string that replaces the matched input.

Исключение возникает, если время выполнения операции замены превышает интервал времени ожидания, заданный Regex.Regex(String, RegexOptions, TimeSpan) конструктором. RegexMatchTimeoutExceptionThe RegexMatchTimeoutException exception is thrown if the execution time of the replacement operation exceeds the time-out interval specified by the Regex.Regex(String, RegexOptions, TimeSpan) constructor. Если не задать интервал времени ожидания при вызове конструктора, исключение создается, если операция превышает любое значение времени ожидания, установленное для домена приложения, в котором Regex создан объект.If you do not set a time-out interval when you call the constructor, the exception is thrown if the operation exceeds any time-out value established for the application domain in which the Regex object is created. Если время ожидания не определено в Regex вызове конструктора или в свойствах домена приложения или если значение времени ожидания равно Regex.InfiniteMatchTimeout, исключение не создаетсяIf no time-out is defined in the Regex constructor call or in the application domain's properties, or if the time-out value is Regex.InfiniteMatchTimeout, no exception is thrown

Поскольку метод возвращает input значение без изменений, если совпадение нет, можно Object.ReferenceEquals использовать метод, чтобы определить, выполнил ли метод какие-либо замены во входной строке.Because the method returns input unchanged if there is no match, you can use the Object.ReferenceEquals method to determine whether the method has made any replacements to the input string.

Дополнительно

Replace(String, String, MatchEvaluator, RegexOptions) Replace(String, String, MatchEvaluator, RegexOptions) Replace(String, String, MatchEvaluator, RegexOptions) Replace(String, String, MatchEvaluator, RegexOptions)

В указанной входной строке заменяет все строки, соответствующие указанному регулярному выражению, строкой, возвращенной делегатом MatchEvaluator.In a specified input string, replaces all strings that match a specified regular expression with a string returned by a MatchEvaluator delegate. Указанные параметры изменяют операцию сопоставления.Specified options modify the matching operation.

public:
 static System::String ^ Replace(System::String ^ input, System::String ^ pattern, System::Text::RegularExpressions::MatchEvaluator ^ evaluator, System::Text::RegularExpressions::RegexOptions options);
public static string Replace (string input, string pattern, System.Text.RegularExpressions.MatchEvaluator evaluator, System.Text.RegularExpressions.RegexOptions options);
static member Replace : string * string * System.Text.RegularExpressions.MatchEvaluator * System.Text.RegularExpressions.RegexOptions -> string
Public Shared Function Replace (input As String, pattern As String, evaluator As MatchEvaluator, options As RegexOptions) As String

Параметры

input
String String String String

Строка для поиска соответствия.The string to search for a match.

pattern
String String String String

Шаблон регулярного выражения для сопоставления.The regular expression pattern to match.

evaluator
MatchEvaluator MatchEvaluator MatchEvaluator MatchEvaluator

Пользовательский метод, анализирующий каждое совпадение и возвращающий либо исходную строку с совпадениями, либо строку замены.A custom method that examines each match and returns either the original matched string or a replacement string.

options
RegexOptions RegexOptions RegexOptions RegexOptions

Побитовая комбинация значений перечисления, предоставляющая параметры для сопоставления.A bitwise combination of the enumeration values that provide options for matching.

Возвраты

Новая строка, идентичная входной строке, за исключением того что строка замены занимает место каждой соответствующей строки.A new string that is identical to the input string, except that a replacement string takes the place of each matched string. Если для pattern не найдено соответствия в текущем экземпляре, метод возвращает текущий экземпляр без изменений.If pattern is not matched in the current instance, the method returns the current instance unchanged.

Исключения

Произошла ошибка анализа регулярного выражения.A regular expression parsing error occurred.

Значение параметра input, pattern или evaluator равно null.input, pattern, or evaluator is null.

Параметр options не является допустимой битовой комбинацией значений RegexOptions.options is not a valid bitwise combination of RegexOptions values.

Время ожидания истекло.A time-out occurred. Дополнительные сведения о времени ожидания см. в разделе "Примечания".For more information about time-outs, see the Remarks section.

Примеры

В следующем примере используется регулярное выражение для извлечения отдельных слов из строки, а затем используется MatchEvaluator делегат для вызова метода с именем WordScramble , который шифрует отдельные буквы в слове.The following example uses a regular expression to extract the individual words from a string, and then uses a MatchEvaluator delegate to call a method named WordScramble that scrambles the individual letters in the word. Для этого WordScramble метод создает массив, содержащий символы в совпадении.To do this, the WordScramble method creates an array that contains the characters in the match. Он также создает параллельный массив, который заполняется случайными числами с плавающей запятой.It also creates a parallel array that it populates with random floating-point numbers. Массивы сортируются путем вызова Array.Sort<TKey,TValue>(TKey[], TValue[], IComparer<TKey>) метода, а отсортированный массив предоставляется в качестве аргумента String конструктору класса.The arrays are sorted by calling the Array.Sort<TKey,TValue>(TKey[], TValue[], IComparer<TKey>) method, and the sorted array is provided as an argument to a String class constructor. Затем вновь созданная строка возвращается WordScramble методом.This newly created string is then returned by the WordScramble method. Шаблон \w+ регулярного выражения соответствует одному или нескольким символам слова; обработчик регулярных выражений продолжит добавлять символы к совпадению до тех пор, пока не встретится символ, отличный от слова, например пробел.The regular expression pattern \w+ matches one or more word characters; the regular expression engine will continue to add characters to the match until it encounters a non-word character, such as a white-space character. Вызов Replace(String, String, MatchEvaluator, RegexOptions) метода \w+ # Matches all the characters in a word. включает параметр, чтобы комментарий в шаблоне регулярного выражения игнорировался обработчиком регулярных выражений. RegexOptions.IgnorePatternWhitespaceThe call to the Replace(String, String, MatchEvaluator, RegexOptions) method includes the RegexOptions.IgnorePatternWhitespace option so that the comment in the regular expression pattern \w+ # Matches all the characters in a word. is ignored by the regular expression engine.

using System;
using System.Collections;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string words = "letter alphabetical missing lack release " + 
                     "penchant slack acryllic laundry cease";
      string pattern = @"\w+  # Matches all the characters in a word.";                            
      MatchEvaluator evaluator = new MatchEvaluator(WordScrambler);
      Console.WriteLine("Original words:");
      Console.WriteLine(words);
      Console.WriteLine();
      Console.WriteLine("Scrambled words:");
      Console.WriteLine(Regex.Replace(words, pattern, evaluator, 
                                      RegexOptions.IgnorePatternWhitespace));      
   }

   public static string WordScrambler(Match match)
   {
      int arraySize = match.Value.Length;
      // Define two arrays equal to the number of letters in the match.
      double[] keys = new double[arraySize];
      char[] letters = new char[arraySize];
      
      // Instantiate random number generator'
      Random rnd = new Random();
      
      for (int ctr = 0; ctr < match.Value.Length; ctr++)
      {
         // Populate the array of keys with random numbers.
         keys[ctr] = rnd.NextDouble();
         // Assign letter to array of letters.
         letters[ctr] = match.Value[ctr];
      }         
      Array.Sort(keys, letters, 0, arraySize, Comparer.Default);      
      return new String(letters);
   }
}
// The example displays output similar to the following:
//    Original words:
//    letter alphabetical missing lack release penchant slack acryllic laundry cease
//    
//    Scrambled words:
//    etlert liahepalbcat imsgsni alkc ereelsa epcnnaht lscak cayirllc alnyurd ecsae
Imports System.Collections
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim words As String = "letter alphabetical missing lack release " + _
                            "penchant slack acryllic laundry cease"
      Dim pattern As String = "\w+  # Matches all the characters in a word."                            
      Dim evaluator As MatchEvaluator = AddressOf WordScrambler
      Console.WriteLine("Original words:")
      Console.WriteLine(words)
      Console.WriteLine("Scrambled words:")
      Console.WriteLine(Regex.Replace(words, pattern, evaluator,
                                      RegexOptions.IgnorePatternWhitespace))      
   End Sub
   
   Public Function WordScrambler(match As Match) As String
      Dim arraySize As Integer = match.Value.Length - 1
      ' Define two arrays equal to the number of letters in the match.
      Dim keys(arraySize) As Double
      Dim letters(arraySize) As Char
      
      ' Instantiate random number generator'
      Dim rnd As New Random()
      
      For ctr As Integer = 0 To match.Value.Length - 1
         ' Populate the array of keys with random numbers.
         keys(ctr) = rnd.NextDouble()
         ' Assign letter to array of letters.
         letters(ctr) = match.Value.Chars(ctr)
      Next         
      Array.Sort(keys, letters, 0, arraySize, Comparer.Default)      
      Return New String(letters)
   End Function
End Module
' The example displays output similar to the following:
'    Original words:
'    letter alphabetical missing lack release penchant slack acryllic laundry cease
'    
'    Scrambled words:
'    etlert liahepalbcat imsgsni alkc ereelsa epcnnaht lscak cayirllc alnyurd ecsae

Комментарии

Regex.Replace(String, String, MatchEvaluator, RegexOptions) Метод удобен для замены соответствия регулярного выражения в, если выполняется любое из следующих условий.The Regex.Replace(String, String, MatchEvaluator, RegexOptions) method is useful for replacing a regular expression match in if any of the following conditions is true:

  • Замещающая строка не может быть задается шаблоном замены регулярных выражений.The replacement string cannot readily be specified by a regular expression replacement pattern.

  • Строка замены, полученная в результате некоторой обработки в сопоставленной строке.The replacement string results from some processing done on the matched string.

  • Строка замены, полученная в результате условной обработки.The replacement string results from conditional processing.

Метод эквивалентен вызову Regex.Matches(String, String, RegexOptions) метода и передаче каждого Match объекта в возвращенной MatchCollection коллекции evaluator делегату.The method is equivalent to calling the Regex.Matches(String, String, RegexOptions) method and passing each Match object in the returned MatchCollection collection to the evaluator delegate.

pattern Параметр состоит из элементов языка регулярных выражений, которые в символьном виде описывают строку для сопоставления.The pattern parameter consists of regular expression language elements that symbolically describe the string to match. Дополнительные сведения о регулярных выражениях см. в разделе .NET Framework регулярные выражения и Язык регулярных выражений — краткий справочник.For more information about regular expressions, see .NET Framework Regular Expressions and Regular Expression Language - Quick Reference.

evaluator Параметр является делегатом для настраиваемого метода, который определяется и проверяет каждое совпадение.The evaluator parameter is the delegate for a custom method that you define and that examines each match. Пользовательский метод должен иметь следующую сигнатуру для сопоставления MatchEvaluator с делегатом.The custom method must have the following signature to match the MatchEvaluator delegate.

public string MatchEvaluatorMethod(Match match)
Public Function MatchEvaluatorMethod(match As Match) As String

Пользовательский метод возвращает строку, которая заменяет найденные входные данные.Your custom method returns a string that replaces the matched input.

RightToLeft Еслиoptions для параметра указано значение, Поиск соответствий начинается в конце входной строки и перемещается влево; в противном случае поиск начинается с начала входной строки и перемещается вправо.If you specify RightToLeft for the options parameter, the search for matches begins at the end of the input string and moves left; otherwise, the search begins at the start of the input string and moves right.

RegexMatchTimeoutException Исключение возникает, если время выполнения операции замены превышает интервал времени ожидания, указанный для домена приложения, в котором вызывается метод.The RegexMatchTimeoutException exception is thrown if the execution time of the replacement operation exceeds the time-out interval specified for the application domain in which the method is called. Если время ожидания не определено в свойствах домена приложения или если значение времени ожидания равно Regex.InfiniteMatchTimeout, исключение не создается.If no time-out is defined in the application domain's properties, or if the time-out value is Regex.InfiniteMatchTimeout, no exception is thrown.

Поскольку метод возвращает input значение без изменений, если совпадение нет, можно Object.ReferenceEquals использовать метод, чтобы определить, выполнил ли метод какие-либо замены во входной строке.Because the method returns input unchanged if there is no match, you can use the Object.ReferenceEquals method to determine whether the method has made any replacements to the input string.

Дополнительно

Replace(String, String, Int32, Int32) Replace(String, String, Int32, Int32) Replace(String, String, Int32, Int32) Replace(String, String, Int32, Int32)

В указанной входной подстроке заменяет указанное максимальное количество строк, соответствующих шаблону регулярного выражения, указанной строкой замены.In a specified input substring, replaces a specified maximum number of strings that match a regular expression pattern with a specified replacement string.

public:
 System::String ^ Replace(System::String ^ input, System::String ^ replacement, int count, int startat);
public string Replace (string input, string replacement, int count, int startat);
member this.Replace : string * string * int * int -> string
Public Function Replace (input As String, replacement As String, count As Integer, startat As Integer) As String

Параметры

input
String String String String

Строка для поиска соответствия.The string to search for a match.

replacement
String String String String

Строка замены.The replacement string.

count
Int32 Int32 Int32 Int32

Максимальное возможное количество случаев замены.Maximum number of times the replacement can occur.

startat
Int32 Int32 Int32 Int32

Позиция символа во входной строке, с которой начинается поиск.The character position in the input string where the search begins.

Возвраты

Новая строка, идентичная входной строке, за исключением того что строка замены занимает место каждой соответствующей строки.A new string that is identical to the input string, except that the replacement string takes the place of each matched string. Если в текущем экземпляре нет соответствия шаблону регулярных выражений, метод возвращает текущий экземпляр без изменений.If the regular expression pattern is not matched in the current instance, the method returns the current instance unchanged.

Исключения

Значение параметра input или replacementnull.input or replacement is null.

Параметр startat имеет значение меньше нуля или больше длины input.startat is less than zero or greater than the length of input.

Время ожидания истекло.A time-out occurred. Дополнительные сведения о времени ожидания см. в разделе "Примечания".For more information about time-outs, see the Remarks section.

Примеры

В следующем примере два пробела, кроме первой строки строки.The following example double-spaces all but the first line of a string. Он определяет шаблон регулярного выражения, ^.*$который соответствует строке текста, Match(String) вызывает метод для сопоставления первой строки Match.Index строки и использует свойства и Match.Count для определения начальной позицией второго штрих.It defines a regular expression pattern, ^.*$, that matches a line of text, calls the Match(String) method to match the first line of the string, and uses the Match.Index and Match.Count properties to determine the starting position of the second line.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string input = "Instantiating a New Type\n" +
                     "Generally, there are two ways that an\n" + 
                     "instance of a class or structure can\n" +
                     "be instantiated. ";
      string pattern = "^.*$";
      string replacement = "\n$&";
      Regex rgx = new Regex(pattern, RegexOptions.Multiline);
      string result = String.Empty; 
      
      Match match = rgx.Match(input);
      // Double space all but the first line.
      if (match.Success) 
         result = rgx.Replace(input, replacement, -1, match.Index + match.Length + 1);

      Console.WriteLine(result);                     
   }
}
// The example displays the following output:
//       Instantiating a New Type
//       
//       Generally, there are two ways that an
//       
//       instance of a class or structure can
//       
//       be instntiated.
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim input As String = "Instantiating a New Type" + vbCrLf + _
                            "Generally, there are two ways that an" + vbCrLf + _
                            "instance of a class or structure can" + vbCrLf + _
                            "be instantiated. "
      Dim pattern As String = "^.*$"
      Dim replacement As String = vbCrLf + "$&"
      Dim rgx As New Regex(pattern, RegexOptions.Multiline)
      Dim result As String = String.Empty 
      
      Dim match As Match = rgx.Match(input)
      ' Double space all but the first line.
      If match.Success Then 
         result = rgx.Replace(input, replacement, -1, match.Index + match.Length + 1)
      End If
      Console.WriteLine(result)                      
   End Sub
End Module
' The example displays the following output:
'       Instantiating a New Type
'       
'       Generally, there are two ways that an
'       
'       instance of a class or structure can
'       
'       be instntiated.

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

ШаблонPattern ОписаниеDescription
^ Соответствует началу строки.Match the start of a line. (Обратите внимание Regex , что экземпляр объекта был создан с RegexOptions.Multiline помощью параметра; в противном случае этот класс символов будет соответствовать только началу входной строки.)(Note that the Regex object was instantiated by using the RegexOptions.Multiline option; otherwise, this character class would only match the beginning of the input string.)
.* Совпадение с любым символом ноль или более раз.Match any character zero or more times.
$ Совпадение с концом строки.Match the end of a line. (Обратите внимание Regex , что экземпляр объекта был создан с RegexOptions.Multiline помощью параметра; в противном случае этот класс символов будет соответствовать только началу входной строки.)(Note that the Regex object was instantiated by using the RegexOptions.Multiline option; otherwise, this character class would only match the beginning of the input string.)

Строка замены (vbCrLf + "$&" в "\n$&" Visual Basic C#) добавляет новую строку перед совпадающей строкой.The replacement string (vbCrLf + "$&" in Visual Basic, "\n$&" in C#) adds a new line before the matched string. Обратите \n внимание, C# что в примере интерпретируется как символ новой строки C# компилятором; он не представляет escape-последовательность символов регулярного выражения.Note that \n in the C# example is interpreted as the newline character by the C# compiler; it does not represent a regular expression character escape.

Комментарии

Поиск соответствий начинается в input строке в позиции startat , указанной параметром.The search for matches starts in the input string at the position specified by the startat parameter. Регулярное выражение — это шаблон, определяемый конструктором для текущего Regex объекта.The regular expression is the pattern defined by the constructor for the current Regex object. Если count имеет отрицательное значение, замена продолжается до конца строки.If count is negative, replacements continue to the end of the string. Если count превышает число совпадений, все совпадения заменяются.If count exceeds the number of matches, all matches are replaced.

Параметр указывает строку, которая будет заменять каждое совпадение inputв. replacementThe replacement parameter specifies the string that is to replace each match in input. replacementможет состоять из любого сочетания литерального текста и подстановки.replacement can consist of any combination of literal text and substitutions. Например, шаблон a*${test}b замены вставляет строку "a *", за которой следует подстрока, совпадающая test с группой записи, если она есть, за которой следует строка "b".For example, the replacement pattern a*${test}b inserts the string "a*" followed by the substring that is matched by the test capturing group, if any, followed by the string "b". Символ * не распознается как метасимвол в шаблоне замены.The * character is not recognized as a metacharacter within a replacement pattern.

Примечание

Подстановки — это единственные элементы языка регулярных выражений, распознаваемые в шаблоне замены.Substitutions are the only regular expression language elements that are recognized in a replacement pattern. Все остальные элементы языка регулярных выражений, включая escape-символы, допускаются только в шаблонах регулярных выражений и не распознаются в шаблонах замены.All other regular expression language elements, including character escapes, are allowed in regular expression patterns only and are not recognized in replacement patterns.

Исключение возникает, если время выполнения операции замены превышает интервал времени ожидания, заданный Regex.Regex(String, RegexOptions, TimeSpan) конструктором. RegexMatchTimeoutExceptionThe RegexMatchTimeoutException exception is thrown if the execution time of the replacement operation exceeds the time-out interval specified by the Regex.Regex(String, RegexOptions, TimeSpan) constructor. Если не задать интервал времени ожидания при вызове конструктора, исключение создается, если операция превышает любое значение времени ожидания, установленное для домена приложения, в котором Regex создан объект.If you do not set a time-out interval when you call the constructor, the exception is thrown if the operation exceeds any time-out value established for the application domain in which the Regex object is created. Если время ожидания не определено в Regex вызове конструктора или в свойствах домена приложения или если значение времени ожидания равно Regex.InfiniteMatchTimeout, исключение не создаетсяIf no time-out is defined in the Regex constructor call or in the application domain's properties, or if the time-out value is Regex.InfiniteMatchTimeout, no exception is thrown

Поскольку метод возвращает input значение без изменений, если совпадение нет, можно Object.ReferenceEquals использовать метод, чтобы определить, выполнил ли метод какие-либо замены во входной строке.Because the method returns input unchanged if there is no match, you can use the Object.ReferenceEquals method to determine whether the method has made any replacements to the input string.

Дополнительно

Replace(String, String, String, RegexOptions) Replace(String, String, String, RegexOptions) Replace(String, String, String, RegexOptions) Replace(String, String, String, RegexOptions)

В указанной входной строке заменяет все строки, соответствующие указанному регулярному выражению, указанной строкой замены.In a specified input string, replaces all strings that match a specified regular expression with a specified replacement string. Указанные параметры изменяют операцию сопоставления.Specified options modify the matching operation.

public:
 static System::String ^ Replace(System::String ^ input, System::String ^ pattern, System::String ^ replacement, System::Text::RegularExpressions::RegexOptions options);
public static string Replace (string input, string pattern, string replacement, System.Text.RegularExpressions.RegexOptions options);
static member Replace : string * string * string * System.Text.RegularExpressions.RegexOptions -> string
Public Shared Function Replace (input As String, pattern As String, replacement As String, options As RegexOptions) As String

Параметры

input
String String String String

Строка для поиска соответствия.The string to search for a match.

pattern
String String String String

Шаблон регулярного выражения для сопоставления.The regular expression pattern to match.

replacement
String String String String

Строка замены.The replacement string.

options
RegexOptions RegexOptions RegexOptions RegexOptions

Побитовая комбинация значений перечисления, предоставляющая параметры для сопоставления.A bitwise combination of the enumeration values that provide options for matching.

Возвраты

Новая строка, идентичная входной строке, за исключением того что строка замены занимает место каждой соответствующей строки.A new string that is identical to the input string, except that the replacement string takes the place of each matched string. Если для pattern не найдено соответствия в текущем экземпляре, метод возвращает текущий экземпляр без изменений.If pattern is not matched in the current instance, the method returns the current instance unchanged.

Исключения

Произошла ошибка анализа регулярного выражения.A regular expression parsing error occurred.

Значение параметра input, pattern или replacement равно null.input, pattern, or replacement is null.

Параметр options не является допустимой битовой комбинацией значений RegexOptions.options is not a valid bitwise combination of RegexOptions values.

Время ожидания истекло.A time-out occurred. Дополнительные сведения о времени ожидания см. в разделе "Примечания".For more information about time-outs, see the Remarks section.

Примеры

В следующем примере используется Replace(String, String, String, RegexOptions) метод для замены имен локальных компьютеров и дисков в UNC-пути локальным путем к файлу.The following example uses the Replace(String, String, String, RegexOptions) method to replace the local machine and drive names in a UNC path with a local file path. Регулярное выражение использует Environment.MachineName свойство, чтобы включить имя локального компьютера, Environment.GetLogicalDrives и метод для включения имен логических дисков.The regular expression uses the Environment.MachineName property to include the name of the local computer, and the Environment.GetLogicalDrives method to include the names of the logical drives. При сравнении строк регулярного выражения регистр не учитывается.All regular expression string comparisons are case-insensitive. Для успешного выполнения примера необходимо заменить литеральную строку "Мойкомпьютер" на имя локального компьютера.To run the example successfully, you should replace the literal string "MyMachine" with your local machine name.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      // Get drives available on local computer and form into a single character expression.
      string[] drives = Environment.GetLogicalDrives();
      string driveNames = String.Empty;
      foreach (string drive in drives)
         driveNames += drive.Substring(0,1);
      // Create regular expression pattern dynamically based on local machine information.
      string pattern = @"\\\\" + Environment.MachineName + @"(?:\.\w+)*\\([" + driveNames + @"])\$";

      string replacement = "$1:";
      string[] uncPaths = { @"\\MyMachine.domain1.mycompany.com\C$\ThingsToDo.txt", 
                            @"\\MyMachine\c$\ThingsToDo.txt", 
                            @"\\MyMachine\d$\documents\mydocument.docx" }; 
      
      foreach (string uncPath in uncPaths)
      {
         Console.WriteLine("Input string: " + uncPath);
         Console.WriteLine("Returned string: " + Regex.Replace(uncPath, pattern, replacement, RegexOptions.IgnoreCase));
         Console.WriteLine();
      }
   }
}
// The example displays the following output if run on a machine whose name is
// MyMachine:
//    Input string: \\MyMachine.domain1.mycompany.com\C$\ThingsToTo.txt
//    Returned string: C:\ThingsToDo.txt
//    
//    Input string: \\MyMachine\c$\ThingsToDo.txt
//    Returned string: c:\ThingsToDo.txt
//    
//    Input string: \\MyMachine\d$\documents\mydocument.docx
//    Returned string: d:\documents\mydocument.docx
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      ' Get drives available on local computer and form into a single character expression.
      Dim drives() As String = Environment.GetLogicalDrives()
      Dim driveNames As String = Nothing
      For Each drive As String In drives
         driveNames += drive.Substring(0,1)
      Next
      ' Create regular expression pattern dynamically based on local machine information.
      Dim pattern As String = "\\\\" + Environment.MachineName + "(?:\.\w+)*\\([" + driveNames + "])\$"

      Dim replacement As String = "$1:"
      Dim uncPaths() AS String = {"\\MyMachine.domain1.mycompany.com\C$\ThingsToDo.txt", _
                                  "\\MyMachine\c$\ThingsToDo.txt", _
                                  "\\MyMachine\d$\documents\mydocument.docx" } 
      
      For Each uncPath As String In uncPaths
         Console.WriteLine("Input string: " + uncPath)
         Console.WriteLine("Returned string: " + Regex.Replace(uncPath, pattern, replacement, RegexOptions.IgnoreCase))
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output if run on a machine whose name is
' MyMachine:
'    Input string: \\MyMachine.domain1.mycompany.com\C$\ThingsToTo.txt
'    Returned string: C:\ThingsToDo.txt
'    
'    Input string: \\MyMachine\c$\ThingsToDo.txt
'    Returned string: c:\ThingsToDo.txt
'    
'    Input string: \\MyMachine\d$\documents\mydocument.docx
'    Returned string: d:\documents\mydocument.docx

Шаблон регулярного выражения определяется следующим выражением:The regular expression pattern is defined by the following expression:

"\\\\" + Environment.MachineName + "(?:\.\w+)*\\([" + driveNames + "])\$"

В следующей таблице показано, как интерпретируется шаблон регулярного выражения.The following table shows how the regular expression pattern is interpreted.

ШаблонPattern ОписаниеDescription
\\\\ Совпадение двух последовательных\символов обратной косой черты ().\\\\ Match two consecutive backslash (\) characters. Поскольку символ обратной косой черты интерпретируется как escape-символ, каждая обратная косая черта должна быть экранирована другой обратной косой чертой.Because the backslash character is interpreted as the escape character, each backslash must be escaped with another backslash.
+ Environment.MachineName + Совпадение со строкой, возвращаемой Environment.MachineName свойством.Match the string that is returned by the Environment.MachineName property.
(?:\.\w+)* Соответствует символу точки.(), за которым следует один или несколько символов слова.Match the period (.) character followed by one or more word characters. Это совпадение может встретиться ноль или более раз.This match can occur zero or more times. Сопоставленная часть выражения не фиксируется.The matched subexpression is not captured.
\\ Совпадение с символом обратной косой черты (\).\\ Match a backslash (\) character.
([" + driveNames + "]) Соответствует классу символов, который состоит из отдельных букв диска.Match the character class that consists of the individual drive letters. Это совпадение является первой захваченной частью выражения.This match is the first captured subexpression.
\$ Совпадение с литералом знака$доллара ().Match the literal dollar sign ($) character.

Шаблон $1 замены заменяет все совпадения первой захваченной частью выражения.The replacement pattern $1 replaces the entire match with the first captured subexpression. То есть имя компьютера и диска в формате UNC заменяет букву диска.That is, it replaces the UNC machine and drive name with the drive letter.

Комментарии

Статические Replace методы эквивалентны созданию Regex объекта с указанным шаблоном регулярного выражения и вызовом метода Replaceэкземпляра.The static Replace methods are equivalent to constructing a Regex object with the specified regular expression pattern and calling the instance method Replace.

pattern Параметр состоит из элементов языка регулярных выражений, которые в символьном виде описывают строку для сопоставления.The pattern parameter consists of regular expression language elements that symbolically describe the string to match. Дополнительные сведения о регулярных выражениях см. в разделе .NET Framework регулярные выражения и Язык регулярных выражений — краткий справочник.For more information about regular expressions, see .NET Framework Regular Expressions and Regular Expression Language - Quick Reference. RightToLeft Еслиoptions для параметра указано значение, Поиск соответствий начинается в конце входной строки и перемещается влево; в противном случае поиск начинается с начала входной строки и перемещается вправо.If you specify RightToLeft for the options parameter, the search for matches begins at the end of the input string and moves left; otherwise, the search begins at the start of the input string and moves right.

Параметр указывает строку, которая будет заменять каждое совпадение inputв. replacementThe replacement parameter specifies the string that is to replace each match in input. replacementможет состоять из любого сочетания литерального текста и подстановки.replacement can consist of any combination of literal text and substitutions. Например, шаблон a*${test}b замены вставляет строку "a *", за которой следует подстрока, совпадающая test с группой записи, если она есть, за которой следует строка "b".For example, the replacement pattern a*${test}b inserts the string "a*" followed by the substring that is matched by the test capturing group, if any, followed by the string "b". Символ * не распознается как метасимвол в шаблоне замены.The * character is not recognized as a metacharacter within a replacement pattern.

Примечание

Подстановки — это единственные элементы языка регулярных выражений, распознаваемые в шаблоне замены.Substitutions are the only regular expression language elements that are recognized in a replacement pattern. Все остальные элементы языка регулярных выражений, включая escape-символы, допускаются только в шаблонах регулярных выражений и не распознаются в шаблонах замены.All other regular expression language elements, including character escapes, are allowed in regular expression patterns only and are not recognized in replacement patterns.

RegexMatchTimeoutException Исключение возникает, если время выполнения операции замены превышает интервал времени ожидания, указанный для домена приложения, в котором вызывается метод.The RegexMatchTimeoutException exception is thrown if the execution time of the replacement operation exceeds the time-out interval specified for the application domain in which the method is called. Если время ожидания не определено в свойствах домена приложения или если значение времени ожидания равно Regex.InfiniteMatchTimeout, исключение не создается.If no time-out is defined in the application domain's properties, or if the time-out value is Regex.InfiniteMatchTimeout, no exception is thrown.

Поскольку метод возвращает input значение без изменений, если совпадение нет, можно Object.ReferenceEquals использовать метод, чтобы определить, выполнил ли метод какие-либо замены во входной строке.Because the method returns input unchanged if there is no match, you can use the Object.ReferenceEquals method to determine whether the method has made any replacements to the input string.

Примечания для тех, кто вызывает этот метод

Время ожидания этого метода истекает после интервала, который равен значению времени ожидания по умолчанию для домена приложения, в котором он вызывается.This method times out after an interval that is equal to the default time-out value of the application domain in which it is called. Если для домена приложения не определено значение времени ожидания, то используется значение InfiniteMatchTimeout, запрещающее истечение времени ожидания метода.If a time-out value has not been defined for the application domain, the value InfiniteMatchTimeout, which prevents the method from timing out, is used. Для замены соответствия Replace(String, String, String, RegexOptions, TimeSpan)шаблону рекомендуется использовать статический метод, который позволяет установить интервал времени ожидания.The recommended static method for replacing a pattern match is Replace(String, String, String, RegexOptions, TimeSpan), which lets you set the time-out interval.

Дополнительно

Replace(String, String, MatchEvaluator) Replace(String, String, MatchEvaluator) Replace(String, String, MatchEvaluator) Replace(String, String, MatchEvaluator)

В указанной входной строке заменяет все строки, соответствующие указанному регулярному выражению, строкой, возвращенной делегатом MatchEvaluator.In a specified input string, replaces all strings that match a specified regular expression with a string returned by a MatchEvaluator delegate.

public:
 static System::String ^ Replace(System::String ^ input, System::String ^ pattern, System::Text::RegularExpressions::MatchEvaluator ^ evaluator);
public static string Replace (string input, string pattern, System.Text.RegularExpressions.MatchEvaluator evaluator);
static member Replace : string * string * System.Text.RegularExpressions.MatchEvaluator -> string
Public Shared Function Replace (input As String, pattern As String, evaluator As MatchEvaluator) As String

Параметры

input
String String String String

Строка для поиска соответствия.The string to search for a match.

pattern
String String String String

Шаблон регулярного выражения для сопоставления.The regular expression pattern to match.

evaluator
MatchEvaluator MatchEvaluator MatchEvaluator MatchEvaluator

Пользовательский метод, анализирующий каждое совпадение и возвращающий либо исходную строку с совпадениями, либо строку замены.A custom method that examines each match and returns either the original matched string or a replacement string.

Возвраты

Новая строка, идентичная входной строке, за исключением того что строка замены занимает место каждой соответствующей строки.A new string that is identical to the input string, except that a replacement string takes the place of each matched string. Если для pattern не найдено соответствия в текущем экземпляре, метод возвращает текущий экземпляр без изменений.If pattern is not matched in the current instance, the method returns the current instance unchanged.

Исключения

Произошла ошибка анализа регулярного выражения.A regular expression parsing error occurred.

Значение параметра input, pattern или evaluator равно null.input, pattern, or evaluator is null.

Время ожидания истекло.A time-out occurred. Дополнительные сведения о времени ожидания см. в разделе "Примечания".For more information about time-outs, see the Remarks section.

Примеры

В следующем примере используется регулярное выражение для извлечения отдельных слов из строки, а затем используется MatchEvaluator делегат для вызова метода с именем WordScramble , который шифрует отдельные буквы в слове.The following example uses a regular expression to extract the individual words from a string, and then uses a MatchEvaluator delegate to call a method named WordScramble that scrambles the individual letters in the word. Для этого WordScramble метод создает массив, содержащий символы в совпадении.To do this, the WordScramble method creates an array that contains the characters in the match. Он также создает параллельный массив, который заполняется случайными числами с плавающей запятой.It also creates a parallel array that it populates with random floating-point numbers. Массивы сортируются путем вызова Array.Sort<TKey,TValue>(TKey[], TValue[], IComparer<TKey>) метода, а отсортированный массив предоставляется в качестве аргумента String конструктору класса.The arrays are sorted by calling the Array.Sort<TKey,TValue>(TKey[], TValue[], IComparer<TKey>) method, and the sorted array is provided as an argument to a String class constructor. Затем вновь созданная строка возвращается WordScramble методом.This newly created string is then returned by the WordScramble method. Шаблон \w+ регулярного выражения соответствует одному или нескольким символам слова; обработчик регулярных выражений продолжит добавлять символы к совпадению до тех пор, пока не встретится символ, отличный от слова, например пробел.The regular expression pattern \w+ matches one or more word characters; the regular expression engine will continue to add characters to the match until it encounters a non-word character, such as a white-space character.

using System;
using System.Collections;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string words = "letter alphabetical missing lack release " + 
                     "penchant slack acryllic laundry cease";
      string pattern = @"\w+";                            
      MatchEvaluator evaluator = new MatchEvaluator(WordScrambler);
      Console.WriteLine("Original words:");
      Console.WriteLine(words);
      Console.WriteLine();
      Console.WriteLine("Scrambled words:");
      Console.WriteLine(Regex.Replace(words, pattern, evaluator));      
   }

   public static string WordScrambler(Match match)
   {
      int arraySize = match.Value.Length;
      // Define two arrays equal to the number of letters in the match.
      double[] keys = new double[arraySize];
      char[] letters = new char[arraySize];
      
      // Instantiate random number generator'
      Random rnd = new Random();
      
      for (int ctr = 0; ctr < match.Value.Length; ctr++)
      {
         // Populate the array of keys with random numbers.
         keys[ctr] = rnd.NextDouble();
         // Assign letter to array of letters.
         letters[ctr] = match.Value[ctr];
      }         
      Array.Sort(keys, letters, 0, arraySize, Comparer.Default);      
      return new String(letters);
   }
}
// The example displays output similar to the following:
//    Original words:
//    letter alphabetical missing lack release penchant slack acryllic laundry cease
//    
//    Scrambled words:
//    elrtte iaeabatlpchl igmnssi lcka aerslee hnpatnce ksacl lialcryc dylruna ecase
Imports System.Collections
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim words As String = "letter alphabetical missing lack release " + _
                            "penchant slack acryllic laundry cease"
      Dim pattern As String = "\w+"                            
      Dim evaluator As MatchEvaluator = AddressOf WordScrambler
      Console.WriteLine("Original words:")
      Console.WriteLine(words)
      Console.WriteLine("Scrambled words:")
      Console.WriteLine(Regex.Replace(words, pattern, evaluator))      
   End Sub
   
   Public Function WordScrambler(match As Match) As String
      Dim arraySize As Integer = match.Value.Length - 1
      ' Define two arrays equal to the number of letters in the match.
      Dim keys(arraySize) As Double
      Dim letters(arraySize) As Char
      
      ' Instantiate random number generator'
      Dim rnd As New Random()
      
      For ctr As Integer = 0 To match.Value.Length - 1
         ' Populate the array of keys with random numbers.
         keys(ctr) = rnd.NextDouble()
         ' Assign letter to array of letters.
         letters(ctr) = match.Value.Chars(ctr)
      Next         
      Array.Sort(keys, letters, 0, arraySize, Comparer.Default)      
      Return New String(letters)
   End Function
End Module
' The example displays output similar to the following:
'    Original words:
'    letter alphabetical missing lack release penchant slack acryllic laundry cease
'    
'    Scrambled words:
'    elrtte iaeabatlpchl igmnssi lcka aerslee hnpatnce ksacl lialcryc dylruna ecase

Комментарии

Regex.Replace(String, String, MatchEvaluator) Метод удобен для замены соответствия регулярного выражения, если выполняется одно из следующих условий.The Regex.Replace(String, String, MatchEvaluator) method is useful for replacing a regular expression match if any of the following conditions is true:

  • Замещающая строка не может быть задается шаблоном замены регулярных выражений.The replacement string cannot readily be specified by a regular expression replacement pattern.

  • Строка замены, полученная в результате некоторой обработки в сопоставленной строке.The replacement string results from some processing done on the matched string.

  • Строка замены, полученная в результате условной обработки.The replacement string results from conditional processing.

Метод эквивалентен вызову Regex.Matches(String, String) метода и передаче каждого Match объекта в возвращенной MatchCollection коллекции evaluator делегату.The method is equivalent to calling the Regex.Matches(String, String) method and passing each Match object in the returned MatchCollection collection to the evaluator delegate.

pattern Параметр состоит из элементов языка регулярных выражений, которые в символьном виде описывают строку для сопоставления.The pattern parameter consists of regular expression language elements that symbolically describe the string to match. Дополнительные сведения о регулярных выражениях см. в разделе .NET Framework регулярные выражения и Язык регулярных выражений — краткий справочник.For more information about regular expressions, see .NET Framework Regular Expressions and Regular Expression Language - Quick Reference.

evaluator Параметр является делегатом для настраиваемого метода, который определяется и проверяет каждое совпадение.The evaluator parameter is the delegate for a custom method that you define and that examines each match. Пользовательский метод должен иметь следующую сигнатуру для сопоставления MatchEvaluator с делегатом.The custom method must have the following signature to match the MatchEvaluator delegate.

public string MatchEvaluatorMethod(Match match)
Public Function MatchEvaluatorMethod(match As Match) As String

Пользовательский метод возвращает строку, которая заменяет найденные входные данные.Your custom method returns a string that replaces the matched input.

RegexMatchTimeoutException Исключение возникает, если время выполнения операции замены превышает интервал времени ожидания, указанный для домена приложения, в котором вызывается метод.The RegexMatchTimeoutException exception is thrown if the execution time of the replacement operation exceeds the time-out interval specified for the application domain in which the method is called. Если время ожидания не определено в свойствах домена приложения или если значение времени ожидания равно Regex.InfiniteMatchTimeout, исключение не создается.If no time-out is defined in the application domain's properties, or if the time-out value is Regex.InfiniteMatchTimeout, no exception is thrown.

Поскольку метод возвращает input значение без изменений, если совпадение нет, можно Object.ReferenceEquals использовать метод, чтобы определить, выполнил ли метод какие-либо замены во входной строке.Because the method returns input unchanged if there is no match, you can use the Object.ReferenceEquals method to determine whether the method has made any replacements to the input string.

Примечания для тех, кто вызывает этот метод

Время ожидания этого метода истекает после интервала, который равен значению времени ожидания по умолчанию для домена приложения, в котором он вызывается.This method times out after an interval that is equal to the default time-out value of the application domain in which it is called. Если для домена приложения не определено значение времени ожидания, то используется значение InfiniteMatchTimeout, запрещающее истечение времени ожидания метода.If a time-out value has not been defined for the application domain, the value InfiniteMatchTimeout, which prevents the method from timing out, is used. Для вычисления и замены соответствия Replace(String, String, MatchEvaluator, RegexOptions, TimeSpan)шаблону рекомендуется использовать статический метод, который позволяет установить интервал времени ожидания.The recommended static method for evaluating and replacing a pattern match is Replace(String, String, MatchEvaluator, RegexOptions, TimeSpan), which lets you set the time-out interval.

Дополнительно

Replace(String, String, String) Replace(String, String, String) Replace(String, String, String) Replace(String, String, String)

В указанной входной строке заменяет все строки, соответствующие указанному регулярному выражению, указанной строкой замены.In a specified input string, replaces all strings that match a specified regular expression with a specified replacement string.

public:
 static System::String ^ Replace(System::String ^ input, System::String ^ pattern, System::String ^ replacement);
public static string Replace (string input, string pattern, string replacement);
static member Replace : string * string * string -> string
Public Shared Function Replace (input As String, pattern As String, replacement As String) As String

Параметры

input
String String String String

Строка для поиска соответствия.The string to search for a match.

pattern
String String String String

Шаблон регулярного выражения для сопоставления.The regular expression pattern to match.

replacement
String String String String

Строка замены.The replacement string.

Возвраты

Новая строка, идентичная входной строке, за исключением того что строка замены занимает место каждой соответствующей строки.A new string that is identical to the input string, except that the replacement string takes the place of each matched string. Если для pattern не найдено соответствия в текущем экземпляре, метод возвращает текущий экземпляр без изменений.If pattern is not matched in the current instance, the method returns the current instance unchanged.

Исключения

Произошла ошибка анализа регулярного выражения.A regular expression parsing error occurred.

Значение параметра input, pattern или replacement равно null.input, pattern, or replacement is null.

Время ожидания истекло.A time-out occurred. Дополнительные сведения о времени ожидания см. в разделе "Примечания".For more information about time-outs, see the Remarks section.

Примеры

В следующем примере определяется регулярное выражение \s+, которое соответствует одному или нескольким символам пробела.The following example defines a regular expression, \s+, that matches one or more white-space characters. Строка замены "" заменяет их одним символом пробела.The replacement string, " ", replaces them with a single space character.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string input = "This is   text with   far  too   much   " + 
                     "white space.";
      string pattern = "\\s+";
      string replacement = " ";
      string result = Regex.Replace(input, pattern, replacement);
      
      Console.WriteLine("Original String: {0}", input);
      Console.WriteLine("Replacement String: {0}", result);                             
   }
}
// The example displays the following output:
//       Original String: This is   text with   far  too   much   white space.
//       Replacement String: This is text with far too much white space.
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim input As String = "This is   text with   far  too   much   " + _
                            "white space."
      Dim pattern As String = "\s+"
      Dim replacement As String = " "
      Dim result As String = Regex.Replace(input, pattern, replacement)
      
      Console.WriteLine("Original String: {0}", input)
      Console.WriteLine("Replacement String: {0}", result)                             
   End Sub
End Module
' The example displays the following output:
'          Original String: This is   text with   far  too   much   white space.
'          Replacement String: This is text with far too much white space.

В следующем примере используется Replace(String, String, String) метод для замены имен локальных компьютеров и дисков в UNC-пути локальным путем к файлу.The following example uses the Replace(String, String, String) method to replace the local machine and drive names in a UNC path with a local file path. Регулярное выражение использует Environment.MachineName свойство, чтобы включить имя локального компьютера, Environment.GetLogicalDrives и метод для включения имен логических дисков.The regular expression uses the Environment.MachineName property to include the name of the local computer, and the Environment.GetLogicalDrives method to include the names of the logical drives. Для успешного выполнения примера необходимо заменить литеральную строку "Мойкомпьютер" на имя локального компьютера.To run the example successfully, you should replace the literal string "MyMachine" with your local machine name.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      // Get drives available on local computer and form into a single character expression.
      string[] drives = Environment.GetLogicalDrives();
      string driveNames = String.Empty;
      foreach (string drive in drives)
         driveNames += drive.Substring(0,1);
      // Create regular expression pattern dynamically based on local machine information.
      string pattern = @"\\\\(?i:" + Environment.MachineName + @")(?:\.\w+)*\\((?i:[" + driveNames + @"]))\$";

      string replacement = "$1:";
      string[] uncPaths = { @"\\MyMachine.domain1.mycompany.com\C$\ThingsToDo.txt", 
                            @"\\MyMachine\c$\ThingsToDo.txt", 
                            @"\\MyMachine\d$\documents\mydocument.docx" }; 
      
      foreach (string uncPath in uncPaths)
      {
         Console.WriteLine("Input string: " + uncPath);
         Console.WriteLine("Returned string: " + Regex.Replace(uncPath, pattern, replacement));
         Console.WriteLine();
      }
   }
}
// The example displays the following output if run on a machine whose name is
// MyMachine:
//    Input string: \\MyMachine.domain1.mycompany.com\C$\ThingsToTo.txt
//    Returned string: C:\ThingsToDo.txt
//    
//    Input string: \\MyMachine\c$\ThingsToDo.txt
//    Returned string: c:\ThingsToDo.txt
//    
//    Input string: \\MyMachine\d$\documents\mydocument.docx
//    Returned string: d:\documents\mydocument.docx
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      ' Get drives available on local computer and form into a single character expression.
      Dim drives() As String = Environment.GetLogicalDrives()
      Dim driveNames As String = Nothing
      For Each drive As String In drives
         driveNames += drive.Substring(0,1)
      Next
      ' Create regular expression pattern dynamically based on local machine information.
      Dim pattern As String = "\\\\(?i:" + Environment.MachineName + ")(?:\.\w+)*\\((?i:[" + driveNames + "]))\$"

      Dim replacement As String = "$1:"
      Dim uncPaths() AS String = {"\\MyMachine.domain1.mycompany.com\C$\ThingsToDo.txt", _
                                  "\\MyMachine\c$\ThingsToDo.txt", _
                                  "\\MyMachine\d$\documents\mydocument.docx" } 
      
      For Each uncPath As String In uncPaths
         Console.WriteLine("Input string: " + uncPath)
         Console.WriteLine("Returned string: " + Regex.Replace(uncPath, pattern, replacement))
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output if run on a machine whose name is
' MyMachine:
'    Input string: \\MyMachine.domain1.mycompany.com\C$\ThingsToTo.txt
'    Returned string: C:\ThingsToDo.txt
'    
'    Input string: \\MyMachine\c$\ThingsToDo.txt
'    Returned string: c:\ThingsToDo.txt
'    
'    Input string: \\MyMachine\d$\documents\mydocument.docx
'    Returned string: d:\documents\mydocument.docx

Шаблон регулярного выражения определяется следующим выражением:The regular expression pattern is defined by the following expression:

"\\\\(?i:" + Environment.MachineName + ")(?:\.\w+)*\\((?i:[" + driveNames + "]))\$"

В следующей таблице показано, как интерпретируется шаблон регулярного выражения.The following table shows how the regular expression pattern is interpreted.

ШаблонPattern ОписаниеDescription
\\\\ Совпадение двух последовательных\символов обратной косой черты ().\\\\ Match two consecutive backslash (\) characters. Поскольку символ обратной косой черты интерпретируется как escape-символ, каждая обратная косая черта должна быть экранирована другой обратной косой чертой.Because the backslash character is interpreted as the escape character, each backslash must be escaped with another backslash.
(?i:" + Environment.MachineName + ") Выполнение совпадения строки, возвращаемой Environment.MachineName свойством, без учета регистра.Perform a case-insensitive match of the string that is returned by the Environment.MachineName property.
(?:\.\w+)* Соответствует символу точки.(), за которым следует один или несколько символов слова.Match the period (.) character followed by one or more word characters. Это совпадение может встретиться ноль или более раз.This match can occur zero or more times. Сопоставленная часть выражения не фиксируется.The matched subexpression is not captured.
\\ Совпадение с символом обратной косой черты (\).\\ Match a backslash (\) character.
((?i:[" + driveNames + "])) Выполните сопоставление класса символов без учета регистра, состоящего из отдельных букв диска.Perform a case-insensitive match of the character class that consists of the individual drive letters. Это совпадение является первой захваченной частью выражения.This match is the first captured subexpression.
\$ Совпадение с литералом знака$доллара ().Match the literal dollar sign ($) character.

Шаблон $1 замены заменяет все совпадения первой захваченной частью выражения.The replacement pattern $1 replaces the entire match with the first captured subexpression. То есть имя компьютера и диска в формате UNC заменяет букву диска.That is, it replaces the UNC machine and drive name with the drive letter.

Комментарии

Статические Replace методы эквивалентны созданию Regex объекта с указанным шаблоном регулярного выражения и вызовом метода Replaceэкземпляра.The static Replace methods are equivalent to constructing a Regex object with the specified regular expression pattern and calling the instance method Replace.

pattern Параметр состоит из элементов языка регулярных выражений, которые в символьном виде описывают строку для сопоставления.The pattern parameter consists of regular expression language elements that symbolically describe the string to match. Дополнительные сведения о регулярных выражениях см. в разделе .NET Framework регулярные выражения и Язык регулярных выражений — краткий справочник.For more information about regular expressions, see .NET Framework Regular Expressions and Regular Expression Language - Quick Reference. Поиск соответствий начинается в начале input строки.The search for matches starts at the beginning of the input string.

Параметр указывает строку, которая будет заменять каждое совпадение inputв. replacementThe replacement parameter specifies the string that is to replace each match in input. replacementможет состоять из любого сочетания литерального текста и подстановки.replacement can consist of any combination of literal text and substitutions. Например, шаблон a*${test}b замены вставляет строку "a *", за которой следует подстрока, совпадающая test с группой записи, если она есть, за которой следует строка "b".For example, the replacement pattern a*${test}b inserts the string "a*" followed by the substring that is matched by the test capturing group, if any, followed by the string "b". Символ * не распознается как метасимвол в шаблоне замены.The * character is not recognized as a metacharacter within a replacement pattern.

Примечание

Подстановки — это единственные элементы языка регулярных выражений, распознаваемые в шаблоне замены.Substitutions are the only regular expression language elements that are recognized in a replacement pattern. Все остальные элементы языка регулярных выражений, включая escape-символы, допускаются только в шаблонах регулярных выражений и не распознаются в шаблонах замены.All other regular expression language elements, including character escapes, are allowed in regular expression patterns only and are not recognized in replacement patterns.

RegexMatchTimeoutException Исключение возникает, если время выполнения операции замены превышает интервал времени ожидания, указанный для домена приложения, в котором вызывается метод.The RegexMatchTimeoutException exception is thrown if the execution time of the replacement operation exceeds the time-out interval specified for the application domain in which the method is called. Если время ожидания не определено в свойствах домена приложения или если значение времени ожидания равно Regex.InfiniteMatchTimeout, исключение не создается.If no time-out is defined in the application domain's properties, or if the time-out value is Regex.InfiniteMatchTimeout, no exception is thrown.

Поскольку метод возвращает input значение без изменений, если совпадение нет, можно Object.ReferenceEquals использовать метод, чтобы определить, выполнил ли метод какие-либо замены во входной строке.Because the method returns input unchanged if there is no match, you can use the Object.ReferenceEquals method to determine whether the method has made any replacements to the input string.

Примечания для тех, кто вызывает этот метод

Время ожидания этого метода истекает после интервала, который равен значению времени ожидания по умолчанию для домена приложения, в котором он вызывается.This method times out after an interval that is equal to the default time-out value of the application domain in which it is called. Если для домена приложения не определено значение времени ожидания, то используется значение InfiniteMatchTimeout, запрещающее истечение времени ожидания метода.If a time-out value has not been defined for the application domain, the value InfiniteMatchTimeout, which prevents the method from timing out, is used. Для замены соответствия Replace(String, String, String, RegexOptions, TimeSpan)шаблону рекомендуется использовать статический метод, который позволяет установить интервал времени ожидания.The recommended static method for replacing a pattern match is Replace(String, String, String, RegexOptions, TimeSpan), which lets you set the time-out interval.

Дополнительно

Replace(String, String, Int32) Replace(String, String, Int32) Replace(String, String, Int32) Replace(String, String, Int32)

В указанной входной строке заменяет указанное максимальное количество строк, соответствующих шаблону регулярного выражения, указанной строкой замены.In a specified input string, replaces a specified maximum number of strings that match a regular expression pattern with a specified replacement string.

public:
 System::String ^ Replace(System::String ^ input, System::String ^ replacement, int count);
public string Replace (string input, string replacement, int count);
member this.Replace : string * string * int -> string
Public Function Replace (input As String, replacement As String, count As Integer) As String

Параметры

input
String String String String

Строка для поиска соответствия.The string to search for a match.

replacement
String String String String

Строка замены.The replacement string.

count
Int32 Int32 Int32 Int32

Максимальное количество возможных случаев замены.The maximum number of times the replacement can occur.

Возвраты

Новая строка, идентичная входной строке, за исключением того что строка замены занимает место каждой соответствующей строки.A new string that is identical to the input string, except that the replacement string takes the place of each matched string. Если в текущем экземпляре нет соответствия шаблону регулярных выражений, метод возвращает текущий экземпляр без изменений.If the regular expression pattern is not matched in the current instance, the method returns the current instance unchanged.

Исключения

Параметр input или replacement имеет значение null.input or replacement is null.

Время ожидания истекло.A time-out occurred. Дополнительные сведения о времени ожидания см. в разделе "Примечания".For more information about time-outs, see the Remarks section.

Примеры

В следующем примере первые пять вхождений повторяющихся символов заменяются одним символом.The following example replaces the first five occurrences of duplicated characters with a single character. Шаблон (\w)\1 регулярного выражения сопоставляет последовательные вхождения одного символа и назначает первое вхождение первой группе записи.The regular expression pattern (\w)\1 matches consecutive occurrences of a single character and assigns the first occurrence to the first capturing group. Шаблон $1 замены заменяет все совпадения первой захваченной группой.The replacement pattern $1 replaces the entire match with the first captured group.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string str = "aabccdeefgghiijkklmm";
      string pattern = "(\\w)\\1"; 
      string replacement = "$1"; 
      Regex rgx = new Regex(pattern);

      string result = rgx.Replace(str, replacement, 5);
      Console.WriteLine("Original String:    '{0}'", str);
      Console.WriteLine("Replacement String: '{0}'", result); 
   }
}
// The example displays the following output:
//       Original String:    'aabccdeefgghiijkklmm'
//       Replacement String: 'abcdefghijkklmm'
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim str As String = "aabccdeefgghiijkklmm"
      Dim pattern As String = "(\w)\1" 
      Dim replacement As String = "$1" 
      Dim rgx As New Regex(pattern)

      Dim result As String = rgx.Replace(str, replacement, 5)
      Console.WriteLine("Original String:    '{0}'", str)
      Console.WriteLine("Replacement String: '{0}'", result)                             
   End Sub
End Module
' The example displays the following output:
'       Original String:    'aabccdeefgghiijkklmm'
'       Replacement String: 'abcdefghijkklmm'

Комментарии

Поиск соответствий начинается в начале input строки.The search for matches starts at the beginning of the input string. Регулярное выражение — это шаблон, определяемый конструктором для текущего Regex объекта.The regular expression is the pattern that is defined by the constructor for the current Regex object. Если count имеет отрицательное значение, замена продолжается до конца строки.If count is negative, replacements continue to the end of the string. Если count превышает число совпадений, все совпадения заменяются.If count exceeds the number of matches, all matches are replaced.

Параметр указывает строку, которая будет заменять первые count совпадения в input. replacementThe replacement parameter specifies the string that is to replace the first count matches in input. replacementможет состоять из любого сочетания литерального текста и подстановки.replacement can consist of any combination of literal text and substitutions. Например, шаблон a*${test}b замены вставляет строку "a *", за которой следует подстрока, совпадающая test с группой записи, если она есть, за которой следует строка "b".For example, the replacement pattern a*${test}b inserts the string "a*" followed by the substring that is matched by the test capturing group, if any, followed by the string "b". Символ * не распознается как метасимвол в шаблоне замены.The * character is not recognized as a metacharacter within a replacement pattern.

Примечание

Подстановки — это единственные элементы языка регулярных выражений, распознаваемые в шаблоне замены.Substitutions are the only regular expression language elements that are recognized in a replacement pattern. Все остальные элементы языка регулярных выражений, включая escape-символы, допускаются только в шаблонах регулярных выражений и не распознаются в шаблонах замены.All other regular expression language elements, including character escapes, are allowed in regular expression patterns only and are not recognized in replacement patterns.

Исключение возникает, если время выполнения операции замены превышает интервал времени ожидания, заданный Regex.Regex(String, RegexOptions, TimeSpan) конструктором. RegexMatchTimeoutExceptionThe RegexMatchTimeoutException exception is thrown if the execution time of the replacement operation exceeds the time-out interval specified by the Regex.Regex(String, RegexOptions, TimeSpan) constructor. Если не задать интервал времени ожидания при вызове конструктора, исключение создается, если операция превышает любое значение времени ожидания, установленное для домена приложения, в котором Regex создан объект.If you do not set a time-out interval when you call the constructor, the exception is thrown if the operation exceeds any time-out value established for the application domain in which the Regex object is created. Если время ожидания не определено в Regex вызове конструктора или в свойствах домена приложения или если значение времени ожидания равно Regex.InfiniteMatchTimeout, исключение не создаетсяIf no time-out is defined in the Regex constructor call or in the application domain's properties, or if the time-out value is Regex.InfiniteMatchTimeout, no exception is thrown

Поскольку метод возвращает input значение без изменений, если совпадение нет, можно Object.ReferenceEquals использовать метод, чтобы определить, выполнил ли метод какие-либо замены во входной строке.Because the method returns input unchanged if there is no match, you can use the Object.ReferenceEquals method to determine whether the method has made any replacements to the input string.

Дополнительно

Replace(String, MatchEvaluator) Replace(String, MatchEvaluator) Replace(String, MatchEvaluator) Replace(String, MatchEvaluator)

В указанной входной строке заменяет все строки, соответствующие указанному регулярному выражению, строкой, возвращенной делегатом MatchEvaluator.In a specified input string, replaces all strings that match a specified regular expression with a string returned by a MatchEvaluator delegate.

public:
 System::String ^ Replace(System::String ^ input, System::Text::RegularExpressions::MatchEvaluator ^ evaluator);
public string Replace (string input, System.Text.RegularExpressions.MatchEvaluator evaluator);
member this.Replace : string * System.Text.RegularExpressions.MatchEvaluator -> string
Public Function Replace (input As String, evaluator As MatchEvaluator) As String

Параметры

input
String String String String

Строка для поиска соответствия.The string to search for a match.

evaluator
MatchEvaluator MatchEvaluator MatchEvaluator MatchEvaluator

Пользовательский метод, анализирующий каждое совпадение и возвращающий либо исходную строку с совпадениями, либо строку замены.A custom method that examines each match and returns either the original matched string or a replacement string.

Возвраты

Новая строка, идентичная входной строке, за исключением того что строка замены занимает место каждой соответствующей строки.A new string that is identical to the input string, except that a replacement string takes the place of each matched string. Если в текущем экземпляре нет соответствия шаблону регулярных выражений, метод возвращает текущий экземпляр без изменений.If the regular expression pattern is not matched in the current instance, the method returns the current instance unchanged.

Исключения

Значение параметра input или evaluatornull.input or evaluator is null.

Время ожидания истекло.A time-out occurred. Дополнительные сведения о времени ожидания см. в разделе "Примечания".For more information about time-outs, see the Remarks section.

Примеры

В следующем примере кода отображается исходная строка, соответствующая каждому слову в исходной строке, преобразует первый символ каждого совпадения в верхний регистр, а затем отображает преобразованную строку.The following code example displays an original string, matches each word in the original string, converts the first character of each match to uppercase, then displays the converted string.

using System;
using System.Text.RegularExpressions;

class RegExSample
{
    static string CapText(Match m)
    {
        // Get the matched string.
        string x = m.ToString();
        // If the first char is lower case...
        if (char.IsLower(x[0]))
        {
            // Capitalize it.
            return char.ToUpper(x[0]) + x.Substring(1, x.Length - 1);
        }
        return x;
    }

    static void Main()
    {
        string text = "four score and seven years ago";

        Console.WriteLine($"text=[{text}]");

        Regex rx = new Regex(@"\w+");

        string result = rx.Replace(text, new MatchEvaluator(RegExSample.CapText));

        Console.WriteLine($"result=[{result}]");
    }
}
// The example displays the following output:
//       text=[four score and seven years ago]
//       result=[Four Score And Seven Years Ago]
Imports System.Text.RegularExpressions

Module RegExSample
    Function CapText(ByVal m As Match) As String
        ' Get the matched string.
        Dim x As String = m.ToString()
        ' If the first char is lower case...
        If Char.IsLower(x.Chars(0)) Then
            ' Capitalize it.
            Return Char.ToUpper(x.Chars(0)) & x.Substring(1, x.Length - 1)
        End If
        Return x
    End Function

    Sub Main()
        Dim text As String = "four score and seven years ago"

        Console.WriteLine($"text=[{text}]")

        Dim rx As New Regex("\w+")

        Dim result As String = rx.Replace(text, AddressOf RegExSample.CapText)

        Console.WriteLine($"result=[{result}]")
    End Sub
End Module
' The example displays the following output:
'       text=[four score and seven years ago]
'       result=[Four Score And Seven Years Ago]

Комментарии

Regex.Replace(String, MatchEvaluator) Метод удобен для замены соответствия регулярного выражения, если выполняется одно из следующих условий.The Regex.Replace(String, MatchEvaluator) method is useful for replacing a regular expression match if any of the following conditions is true:

  • Замещающая строка не может быть задается шаблоном замены регулярных выражений.The replacement string cannot readily be specified by a regular expression replacement pattern.

  • Строка замены, полученная в результате некоторой обработки в сопоставленной строке.The replacement string results from some processing done on the matched string.

  • Строка замены, полученная в результате условной обработки.The replacement string results from conditional processing.

Метод эквивалентен вызову Regex.Matches(String) метода и передаче каждого Match объекта в возвращенной MatchCollection коллекции evaluator делегату.The method is equivalent to calling the Regex.Matches(String) method and passing each Match object in the returned MatchCollection collection to the evaluator delegate.

Регулярное выражение — это шаблон, определяемый конструктором для текущего Regex объекта.The regular expression is the pattern defined by the constructor for the current Regex object.

evaluator Параметр является делегатом для настраиваемого метода, который определяется и проверяет каждое совпадение.The evaluator parameter is the delegate for a custom method that you define and that examines each match. Пользовательский метод должен иметь следующую сигнатуру для сопоставления MatchEvaluator с делегатом.The custom method must have the following signature to match the MatchEvaluator delegate.

public string MatchEvaluatorMethod(Match match)
Public Function MatchEvaluatorMethod(match As Match) As String

Пользовательский метод возвращает строку, которая заменяет найденные входные данные.Your custom method returns a string that replaces the matched input.

Исключение возникает, если время выполнения операции замены превышает интервал времени ожидания, заданный Regex.Regex(String, RegexOptions, TimeSpan) конструктором. RegexMatchTimeoutExceptionThe RegexMatchTimeoutException exception is thrown if the execution time of the replacement operation exceeds the time-out interval specified by the Regex.Regex(String, RegexOptions, TimeSpan) constructor. Если не задать интервал времени ожидания при вызове конструктора, исключение создается, если операция превышает любое значение времени ожидания, установленное для домена приложения, в котором Regex создан объект.If you do not set a time-out interval when you call the constructor, the exception is thrown if the operation exceeds any time-out value established for the application domain in which the Regex object is created. Если время ожидания не определено в Regex вызове конструктора или в свойствах домена приложения или если значение времени ожидания равно Regex.InfiniteMatchTimeout, исключение не создаетсяIf no time-out is defined in the Regex constructor call or in the application domain's properties, or if the time-out value is Regex.InfiniteMatchTimeout, no exception is thrown

Поскольку метод возвращает input значение без изменений, если совпадение нет, можно Object.ReferenceEquals использовать метод, чтобы определить, выполнил ли метод какие-либо замены во входной строке.Because the method returns input unchanged if there is no match, you can use the Object.ReferenceEquals method to determine whether the method has made any replacements to the input string.

Дополнительно

Replace(String, String) Replace(String, String) Replace(String, String) Replace(String, String)

В указанной входной строке заменяет все строки, соответствующие шаблону регулярного выражения, указанной строкой замены.In a specified input string, replaces all strings that match a regular expression pattern with a specified replacement string.

public:
 System::String ^ Replace(System::String ^ input, System::String ^ replacement);
public string Replace (string input, string replacement);
member this.Replace : string * string -> string
Public Function Replace (input As String, replacement As String) As String

Параметры

input
String String String String

Строка для поиска соответствия.The string to search for a match.

replacement
String String String String

Строка замены.The replacement string.

Возвраты

Новая строка, идентичная входной строке, за исключением того что строка замены занимает место каждой соответствующей строки.A new string that is identical to the input string, except that the replacement string takes the place of each matched string. Если в текущем экземпляре нет соответствия шаблону регулярных выражений, метод возвращает текущий экземпляр без изменений.If the regular expression pattern is not matched in the current instance, the method returns the current instance unchanged.

Исключения

Значение параметра input или replacementnull.input or replacement is null.

Время ожидания истекло.A time-out occurred. Дополнительные сведения о времени ожидания см. в разделе "Примечания".For more information about time-outs, see the Remarks section.

Примеры

В следующем примере определяется регулярное выражение \s+, которое соответствует одному или нескольким символам пробела.The following example defines a regular expression, \s+, that matches one or more white-space characters. Строка замены "" заменяет их одним символом пробела.The replacement string, " ", replaces them with a single space character.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string input = "This is   text with   far  too   much   " + 
                     "white space.";
      string pattern = "\\s+";
      string replacement = " ";
      Regex rgx = new Regex(pattern);
      string result = rgx.Replace(input, replacement);
      
      Console.WriteLine("Original String: {0}", input);
      Console.WriteLine("Replacement String: {0}", result);                             
   }
}
// The example displays the following output:
//       Original String: This is   text with   far  too   much   white space.
//       Replacement String: This is text with far too much white space.
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim input As String = "This is   text with   far  too   much   " + _
                            "white space."
      Dim pattern As String = "\s+"
      Dim replacement As String = " "
      Dim rgx As New Regex(pattern)
      Dim result As String = rgx.Replace(input, replacement)
      
      Console.WriteLine("Original String: {0}", input)
      Console.WriteLine("Replacement String: {0}", result)                             
   End Sub
End Module
' The example displays the following output:
'          Original String: This is   text with   far  too   much   white space.
'          Replacement String: This is text with far too much white space.

В следующем примере определяется регулярное выражение, (\p{Sc}\s?)?(\d+\.?((?<=\.)\d+)?)(?(1)|\s?\p{Sc})?и $2шаблон замены, который удаляет из числового значения либо начальный, либо завершающий символ валюты.The following example defines a regular expression, (\p{Sc}\s?)?(\d+\.?((?<=\.)\d+)?)(?(1)|\s?\p{Sc})?, and a replacement pattern, $2, that removes either a leading or a trailing currency symbol from a numeric value.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string pattern =  @"(\p{Sc}\s?)?(\d+\.?((?<=\.)\d+)?)(?(1)|\s?\p{Sc})?";
      string input = "$17.43  €2 16.33  £0.98  0.43   £43   12€  17";
      string replacement = "$2";
      Regex rgx = new Regex(pattern);
      string result = rgx.Replace(input, replacement);

      Console.WriteLine("Original String:    '{0}'", input);
      Console.WriteLine("Replacement String: '{0}'", result);                             
   }
}
// The example displays the following output:
//       Original String:    '$17.43  €2 16.33  £0.98  0.43   £43   12€  17'
//       Replacement String: '17.43  2 16.33  0.98  0.43   43   12  17'
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim pattern As String =  "(\p{Sc}\s?)?(\d+\.?((?<=\.)\d+)?)(?(1)|\s?\p{Sc})?"
      Dim input As String = "$17.43  €2 16.33  £0.98  0.43   £43   12€  17"
      Dim replacement As String = "$2"
      Dim rgx As New Regex(pattern)
      Dim result As String = rgx.Replace(input, replacement)

      Console.WriteLine("Original String:    '{0}'", input)
      Console.WriteLine("Replacement String: '{0}'", result)                             
   End Sub
End Module
' The example displays the following output:
'       Original String:    '$17.43  €2 16.33  £0.98  0.43   £43   12€  17'
'       Replacement String: '17.43  2 16.33  0.98  0.43   43   12  17'

Возможные интерпретации регулярного выражения показаны в следующей таблице.The regular expression is interpreted as shown in the following table.

ШаблонPattern ОписаниеDescription
\p{Sc} Совпадение с символом валюты.Match a currency symbol. {Sc}обозначает любой символ, который является членом символа Юникода, категории валюты.{Sc} denotes any character that is a member of the Unicode Symbol, Currency category.
\s? Совпадение с нулем или одним символом пробела.Match zero or one white-space character.
(\p{Sc}\s?)? Совпадение с нулем или одним вхождением сочетания символа валюты, за которым следует ноль или один символ пробела.Match zero or one occurrence of the combination of a currency symbol followed by zero or one white-space character. Это первая группа записи.This is the first capturing group.
\d+ Совпадение с одной или несколькими десятичными цифрами.Match one or more decimal digits.
\.? Совпадение с нулем или одним вхождением точки (используется в качестве символа десятичного разделителя).Match zero or one occurrence of a period (used as a decimal separator character).
((?<=\.)\d+)? Если точка является предыдущим символом, соответствует одной или нескольким десятичным цифрам.If a period is the previous character, match one or more decimal digits. Этот шаблон можно сопоставить с нулем или один раз.This pattern can be matched either zero or one time.
(\d+\.?((?<=\.)\d+)?) Соответствует шаблону из одной или нескольких десятичных цифр, за которыми следует необязательная точка и дополнительные десятичные цифры.Match the pattern of one or more decimal digits followed by an optional period and additional decimal digits. Это вторая группа записи.This is the second capturing group. Вызов Replace(String, String) метода заменяет все совпадение значением этой захваченной группы.The call to the Replace(String, String) method replaces the entire match with the value of this captured group.
(?(1)|\s?\p{Sc})? Если первая захваченная группа существует, соответствует пустой строке.If the first captured group exists, match an empty string. В противном случае соответствует нулю или одному символу пробела, за которым следует символ валюты.Otherwise, match zero or one white-space character followed by a currency symbol.

Комментарии

Поиск соответствий начинается в начале input строки.The search for matches starts at the beginning of the input string. Регулярное выражение — это шаблон, определяемый конструктором для текущего Regex объекта.The regular expression is the pattern defined by the constructor for the current Regex object.

Параметр указывает строку, которая будет заменять каждое совпадение inputв. replacementThe replacement parameter specifies the string that is to replace each match in input. replacementможет состоять из любого сочетания литерального текста и подстановки.replacement can consist of any combination of literal text and substitutions. Например, шаблон a*${test}b замены вставляет строку "a *", за которой следует подстрока, совпадающая test с группой записи, если она есть, за которой следует строка "b".For example, the replacement pattern a*${test}b inserts the string "a*" followed by the substring that is matched by the test capturing group, if any, followed by the string "b". Символ * не распознается как метасимвол в шаблоне замены.The * character is not recognized as a metacharacter within a replacement pattern.

Примечание

Подстановки — это единственные элементы языка регулярных выражений, распознаваемые в шаблоне замены.Substitutions are the only regular expression language elements that are recognized in a replacement pattern. Все остальные элементы языка регулярных выражений, включая escape-символы, допускаются только в шаблонах регулярных выражений и не распознаются в шаблонах замены.All other regular expression language elements, including character escapes, are allowed in regular expression patterns only and are not recognized in replacement patterns.

Исключение возникает, если время выполнения операции замены превышает интервал времени ожидания, заданный Regex.Regex(String, RegexOptions, TimeSpan) конструктором. RegexMatchTimeoutExceptionThe RegexMatchTimeoutException exception is thrown if the execution time of the replacement operation exceeds the time-out interval specified by the Regex.Regex(String, RegexOptions, TimeSpan) constructor. Если не задать интервал времени ожидания при вызове конструктора, исключение создается, если операция превышает любое значение времени ожидания, установленное для домена приложения, в котором Regex создан объект.If you do not set a time-out interval when you call the constructor, the exception is thrown if the operation exceeds any time-out value established for the application domain in which the Regex object is created. Если время ожидания не определено в Regex вызове конструктора или в свойствах домена приложения или если значение времени ожидания равно Regex.InfiniteMatchTimeout, исключение не создаетсяIf no time-out is defined in the Regex constructor call or in the application domain's properties, or if the time-out value is Regex.InfiniteMatchTimeout, no exception is thrown

Поскольку метод возвращает input значение без изменений, если совпадение нет, можно Object.ReferenceEquals использовать метод, чтобы определить, выполнил ли метод какие-либо замены во входной строке.Because the method returns input unchanged if there is no match, you can use the Object.ReferenceEquals method to determine whether the method has made any replacements to the input string.

Дополнительно

Replace(String, MatchEvaluator, Int32) Replace(String, MatchEvaluator, Int32) Replace(String, MatchEvaluator, Int32) Replace(String, MatchEvaluator, Int32)

В указанной входной строке заменяется указанное максимальное количество строк, соответствующих шаблону регулярного выражения, строкой, возвращенной делегатом MatchEvaluator.In a specified input string, replaces a specified maximum number of strings that match a regular expression pattern with a string returned by a MatchEvaluator delegate.

public:
 System::String ^ Replace(System::String ^ input, System::Text::RegularExpressions::MatchEvaluator ^ evaluator, int count);
public string Replace (string input, System.Text.RegularExpressions.MatchEvaluator evaluator, int count);
member this.Replace : string * System.Text.RegularExpressions.MatchEvaluator * int -> string
Public Function Replace (input As String, evaluator As MatchEvaluator, count As Integer) As String

Параметры

input
String String String String

Строка для поиска соответствия.The string to search for a match.

evaluator
MatchEvaluator MatchEvaluator MatchEvaluator MatchEvaluator

Пользовательский метод, анализирующий каждое совпадение и возвращающий либо исходную строку с совпадениями, либо строку замены.A custom method that examines each match and returns either the original matched string or a replacement string.

count
Int32 Int32 Int32 Int32

Максимальное количество возможных случаев замены.The maximum number of times the replacement will occur.

Возвраты

Новая строка, идентичная входной строке, за исключением того что строка замены занимает место каждой соответствующей строки.A new string that is identical to the input string, except that a replacement string takes the place of each matched string. Если в текущем экземпляре нет соответствия шаблону регулярных выражений, метод возвращает текущий экземпляр без изменений.If the regular expression pattern is not matched in the current instance, the method returns the current instance unchanged.

Исключения

Значение параметра input или evaluatornull.input or evaluator is null.

Время ожидания истекло.A time-out occurred. Дополнительные сведения о времени ожидания см. в разделе "Примечания".For more information about time-outs, see the Remarks section.

Примеры

В следующем примере регулярное выражение используется для намеренного написания недопустимых частей слов в списке.The following example uses a regular expression to deliberately misspell half of the words in a list. Он использует регулярное выражение \w*(ie|ei)\w* для сопоставления слов, содержащих символы "IE" или "EI".It uses the regular expression \w*(ie|ei)\w* to match words that include the characters "ie" or "ei". Он передает первую половину соответствующих слов ReverseLetter в метод, который, в свою очередь, Replace(String, String, String, RegexOptions) использует метод для отмены "i" и "e" в соответствующей строке.It passes the first half of the matching words to the ReverseLetter method, which, in turn, uses the Replace(String, String, String, RegexOptions) method to reverse "i" and "e" in the matched string. Остальные слова останутся без изменений.The remaining words remain unchanged.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string input = "deceive relieve achieve belief fierce receive";
      string pattern = @"\w*(ie|ei)\w*";
      Regex rgx = new Regex(pattern, RegexOptions.IgnoreCase);
      Console.WriteLine("Original string: " + input);
      
      string result = rgx.Replace(input, new MatchEvaluator(Example.ReverseLetter), 
                                  input.Split(' ').Length / 2);
      Console.WriteLine("Returned string: " + result);
   }

   static string ReverseLetter(Match match)
   {
      return Regex.Replace(match.Value, "([ie])([ie])", "$2$1", 
                           RegexOptions.IgnoreCase);            
   }
}
// The example displays the following output:
//    Original string: deceive relieve achieve belief fierce receive
//    Returned string: decieve releive acheive belief fierce receive
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim input As String = "deceive relieve achieve belief fierce receive"
      Dim pattern As String = "\w*(ie|ei)\w*"
      Dim rgx As New Regex(pattern, RegexOptions.IgnoreCase)
      Console.WriteLine("Original string: " + input)
      
      Dim result As String = rgx.Replace(input, AddressOf ReverseLetter, 
                                           input.Split(" "c).Length \ 2)
      Console.WriteLine("Returned string: " + result)
   End Sub

   Public Function ReverseLetter(match As Match) As String
      Return Regex.Replace(match.Value, "([ie])([ie])", "$2$1", 
                           RegexOptions.IgnoreCase)            
   End Function
End Module
' The example displays the following output:
'    Original string: deceive relieve achieve belief fierce receive
'    Returned string: decieve releive acheive belief fierce receive

Определение регулярного выражения \w*(ie|ei)\w* показано в таблице ниже.The regular expression \w*(ie|ei)\w* is defined as shown in the following table.

ШаблонPattern ОписаниеDescription
\w* Совпадение с нулем или большим числом буквенных символов.Match zero or more word characters.
(ie|ei) Совпадение с "IE" или "EI".Match either "ie" or "ei".
\w* Совпадение с нулем или большим числом буквенных символов.Match zero or more word characters.

Шаблон ([ie])([ie]) регулярного выражения ReverseLetter в методе соответствует первому символу "i" или "e" в дифсонг "IE" или "EI" и назначает букву первой захваченной группе.The regular expression pattern ([ie])([ie]) in the ReverseLetter method matches the first "i" or "e" in the diphthong "ie" or "ei" and assigns the letter to the first capturing group. Он соответствует второму символу "i" или "e" и назначает букву второй группе записи.It matches the second "i" or "e" and assigns the letter to the second capturing group. Затем два символа меняются местами, вызывая Replace(String, String, String) метод с шаблоном $2$1замены.The two characters are then reversed by calling the Replace(String, String, String) method with the replacement pattern $2$1.

Комментарии

Regex.Replace(String, MatchEvaluator, Int32) Метод удобен для замены соответствия регулярного выражения, если выполняется одно из следующих условий.The Regex.Replace(String, MatchEvaluator, Int32) method is useful for replacing a regular expression match if any of the following conditions is true:

  • Замещающая строка не может быть задается шаблоном замены регулярных выражений.The replacement string cannot readily be specified by a regular expression replacement pattern.

  • Строка замены, полученная в результате некоторой обработки в сопоставленной строке.The replacement string results from some processing done on the matched string.

  • Строка замены, полученная в результате условной обработки.The replacement string results from conditional processing.

Метод Regex.Matches(String) эквивалентен вызову метода и передаче первых Match count объектов из возвращенной MatchCollection коллекции evaluator делегату.The method is equivalent to calling the Regex.Matches(String) method and passing the first countMatch objects in the returned MatchCollection collection to the evaluator delegate.

Регулярное выражение — это шаблон, определяемый конструктором для текущего Regex объекта.The regular expression is the pattern defined by the constructor for the current Regex object.

evaluator Параметр является делегатом для настраиваемого метода, который определяется и проверяет каждое совпадение.The evaluator parameter is the delegate for a custom method that you define and that examines each match. Пользовательский метод должен иметь следующую сигнатуру для сопоставления MatchEvaluator с делегатом.The custom method must have the following signature to match the MatchEvaluator delegate.

public string MatchEvaluatorMethod(Match match)
Public Function MatchEvaluatorMethod(match As Match) As String

Пользовательский метод возвращает строку, которая заменяет найденные входные данные.Your custom method returns a string that replaces the matched input.

Исключение возникает, если время выполнения операции замены превышает интервал времени ожидания, заданный Regex.Regex(String, RegexOptions, TimeSpan) конструктором. RegexMatchTimeoutExceptionThe RegexMatchTimeoutException exception is thrown if the execution time of the replacement operation exceeds the time-out interval specified by the Regex.Regex(String, RegexOptions, TimeSpan) constructor. Если не задать интервал времени ожидания при вызове конструктора, исключение создается, если операция превышает любое значение времени ожидания, установленное для домена приложения, в котором Regex создан объект.If you do not set a time-out interval when you call the constructor, the exception is thrown if the operation exceeds any time-out value established for the application domain in which the Regex object is created. Если время ожидания не определено в Regex вызове конструктора или в свойствах домена приложения или если значение времени ожидания равно Regex.InfiniteMatchTimeout, исключение не создаетсяIf no time-out is defined in the Regex constructor call or in the application domain's properties, or if the time-out value is Regex.InfiniteMatchTimeout, no exception is thrown

Поскольку метод возвращает input значение без изменений, если совпадение нет, можно Object.ReferenceEquals использовать метод, чтобы определить, выполнил ли метод какие-либо замены во входной строке.Because the method returns input unchanged if there is no match, you can use the Object.ReferenceEquals method to determine whether the method has made any replacements to the input string.

Дополнительно

Применяется к