我需要执行多字符串替换。我有一个字符串,其中有几个部分需要根据替换映射进行更改。
所有替换必须在一次操作中完成 - 这意味着如果“a
”应该替换为“b
”以及“b
” "必须替换为 "c
"且输入字符串为 "abc
",结果将为 "bcc
"
我有一个基于构建正则表达式然后替换所有匹配项的解决方案。前段时间写的,现在重构代码,不太满意。是否有更好(更快、更简单)的解决方案?
这是我的:
public static string Replace(string s, Dictionary<string, string> substitutions)
{
string pattern = "";
int i = 0;
foreach (string ch in substitutions.Keys)
{
if (i == 0)
pattern += "(" + Regex.Escape(ch) + ")";
else
pattern += "|(" + Regex.Escape(ch) + ")";
i++;
}
var r = new Regex(pattern);
var parts = r.Split(s);
string ret = "";
foreach (string part in parts)
{
if (part.Length == 1 && substitutions.ContainsKey(part[0].ToString()))
{
ret += substitutions[part[0].ToString()];
}
else
{
ret += part;
}
}
return ret;
}
和测试用例:
var test = "test aabbcc";
var output = Replace(test, new Dictionary<string, string>{{"a","b"},{"b","y"}});
Assert.That(output=="test bbyycc");
最佳答案
您可以将所有这些替换为
var r = new Regex(string.Join("|", substitutions.Keys.Select(k => "(" + k + ")")));
return r.Replace(s, m => substitutions[m.Value]);
关键是利用 string.Join
方法而不是自己实现,并利用这个 Regex.Replace
overload和代表进行替换。
关于c# - 快速多字符串替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22043083/