加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 快速多字符串替换

发布时间:2020-12-15 06:33:39 所属栏目:百科 来源:网络整理
导读:我需要执行多字符串替换.我有一个字符串,其中几个部分需要根据替代地图进行更改. 所有更换必须在一个操作中完成 – 这意味着如果“a”应替换为“b”,并且“b”必须用“c”替换,输入字符串为“abc”,结果将为“bcc” 我有一个基于正则表达式的解决方案,然后替
我需要执行多字符串替换.我有一个字符串,其中几个部分需要根据替代地图进行更改.

所有更换必须在一个操作中完成 – 这意味着如果“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和代表做更换.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读