gpt4 book ai didi

c# - 快速多字符串替换

转载 作者:可可西里 更新时间:2023-11-01 09:08:56 25 4
gpt4 key购买 nike

我需要执行多字符串替换。我有一个字符串,其中有几个部分需要根据替换映射进行更改。

所有替换必须在一次操作中完成 - 这意味着如果“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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com