【发布时间】:2016-05-11 09:07:56
【问题描述】:
我有一个字符串,它可能与指定模式有多个匹配项。
每个都需要更换。
我有这个代码:
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 为每个匹配,但是这个 sound 性能很重您的数据大小是多少?
-
我有大约 100,000 个这样的字符串来反复思考......每个可能有 1-3 个匹配项来替换每个不同的字符串。
-
@LucasTrzesniewski:我认为 Mortalus 意味着在
foreach中使用Regex.Replace是性能杀手。关键是Regex.Replace可以代替 使用Regex.Matches。 -
@WiktorStribiżew 是的,我想我误解了他的意图(他对你的回答的评论证实了这一点)