Regex.Replace 方法 (System.Text.RegularExpressions) 您所在的位置:网站首页 正则表达式匹配重复字符串 Regex.Replace 方法 (System.Text.RegularExpressions)

Regex.Replace 方法 (System.Text.RegularExpressions)

2024-07-14 06:51| 来源: 网络整理| 查看: 265

Source:Regex.Replace.cs Source:Regex.Replace.cs Source:Regex.Replace.cs

在指定的输入字符串中,将匹配指定正则表达式的所有子字符串替换为由 MatchEvaluator 委托返回的字符串。 其他参数指定修改匹配操作的选项,如果未找到匹配项,则指定超时间隔。

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

要搜索匹配项的字符串。

pattern String

要匹配的正则表达式模式。

evaluator MatchEvaluator

检查每个匹配项并返回原始匹配字符串或替换字符串的自定义方法。

options RegexOptions

提供匹配选项的枚举值的按位组合。

matchTimeout TimeSpan

超时间隔,或 InfiniteMatchTimeout 指示方法不应超时。

返回 String

与输入字符串相同的新字符串,但替换字符串取代了每个匹配字符串的位置。 如果当前实例中 pattern 不匹配,该方法将返回当前实例不变。

例外 ArgumentException

发生正则表达式分析错误。

ArgumentNullException

input、pattern或 evaluatornull。

ArgumentOutOfRangeException

options 不是 RegexOptions 值的有效按位组合。

-或-

matchTimeout 为负数、零或大于约 24 天。

RegexMatchTimeoutException

发生超时。 有关超时的详细信息,请参阅“备注”部分。

示例

以下示例使用正则表达式从字符串中提取各个单词,然后使用 MatchEvaluator 委托调用一个名为 WordScramble 的方法,该方法会争用单词中的单个字母。 为此,WordScramble 方法将创建一个数组,其中包含匹配中的字符。 它还会创建一个并行数组,该数组使用随机浮点数进行填充。 数组通过调用 Array.Sort(TKey[], TValue[], IComparer) 方法进行排序,排序数组作为 String 类构造函数的参数提供。 然后,WordScramble 方法返回此新创建的字符串。 正则表达式模式 \w+ 匹配一个或多个单词字符;正则表达式引擎将继续将字符添加到匹配项,直到遇到非单词字符(例如空格字符)。 对 Replace(String, String, MatchEvaluator, RegexOptions) 方法的调用包括 RegexOptions.IgnorePatternWhitespace 选项,以便正则表达式模式中的注释 \w+ # Matches all the characters in a word. 被正则表达式引擎忽略。

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) 方法可用于替换正则表达式匹配项:

如果替换字符串无法由正则表达式替换模式轻松指定。

如果替换字符串导致对匹配字符串执行的一些处理。

如果替换字符串来自条件处理的结果。

该方法等效于调用 Regex.Matches(String, String, RegexOptions) 方法并将返回 MatchCollection 集合中的每个 Match 对象传递给 evaluator 委托。

pattern 参数由正则表达式语言元素组成,这些元素以符号方式描述要匹配的字符串。 有关正则表达式的详细信息,请参阅 .NET 正则表达式 和 正则表达式语言 - 快速参考。

evaluator 参数是定义并检查每个匹配项的自定义方法的委托。 自定义方法必须具有以下签名才能匹配 MatchEvaluator 委托。

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

自定义方法返回替换匹配输入的字符串。

如果为 options 参数指定 RightToLeft,则搜索匹配项从输入字符串的末尾开始,然后向左移动;否则,搜索从输入字符串的开头开始,然后向右移动。

matchTimeout 参数指定模式匹配方法在超时之前应尝试查找匹配的时间。设置超时间隔可防止依赖过度回溯的正则表达式出现“在处理包含接近匹配项的输入时停止响应”。 有关详细信息,请参阅 正则表达式的最佳做法 和 回溯。 如果未在该时间间隔中找到匹配项,该方法将引发 RegexMatchTimeoutException 异常。 matchTimeout 替代为方法在其中执行的应用程序域定义的任何默认超时值。

由于该方法在没有任何匹配项的情况下返回 input 不变,因此可以使用 Object.ReferenceEquals 方法来确定该方法是否已对输入字符串进行任何替换。

调用方说明

建议将 matchTimeout 参数设置为适当的值,例如两秒。 如果通过指定 InfiniteMatchTimeout来禁用超时,则正则表达式引擎提供略微更好的性能。 但是,应仅在以下情况下禁用超时:

当正则表达式处理的输入派生自已知且受信任的源或包含静态文本时。 这不包括用户动态输入的文本。

当正则表达式模式经过全面测试以确保它有效地处理匹配项、非匹配项和接近匹配项时。

当正则表达式模式不包含任何已知在处理接近匹配时导致过度回溯的语言元素。

另请参阅 RegexOptions 正则表达式中的 替换 正则表达式语言元素 在正则表达式中 回溯 .NET 中正则表达式的最佳做法 适用于


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有