我有一个字符串,可能包含一个或多个指定模式的匹配项。
每个匹配项都需要被替换。
我有以下代码:
var pattern = @"\$\$\@[a-zA-Z0-9_]*\b";
var stringVariableMatches = Regex.Matches(strValue, pattern);
var sb = new StringBuilder(strValue);
foreach (Match stringVarMatch in stringVariableMatches)
{
var stringReplacment = variablesDictionary[stringVarMatch.Value];
sb.Remove(stringVarMatch.Index, stringVarMatch.Length)
.Insert(stringVarMatch.Index, stringReplacment);
}
return sb.ToString();
当我有几个匹配项时,问题在于第一个被替换,其余的起始索引也随之改变,因此在某些情况下,在字符串缩短后进行替换时,会出现索引超出范围的情况。我知道我可以对每个匹配项使用
Regex.Replace
,但这可能会影响性能,并希望看看是否有其他解决方案来替换多个匹配项,每个匹配项都有不同的字符串。
Regex.Replace
会影响性能。关键是Regex.Replace
可以代替Regex.Matches
使用。 - Wiktor Stribiżew