首页 > 解决方案 > C# 中的字符串替换,但只有确切的字符集

问题描述

我有以下字符串:

string x = "23;32;323;34;45";

我想用 X 替换 23 ,如下所示:

x = "x:32;323;34;45";

但是当我尝试它时,我得到了这个:

x = "x:32;3x;34;45";

有没有办法获得预期的输出?

标签: c#stringreplace

解决方案


您将需要一个正则表达式 (regexp)。这里的替换规则是

  • 词界
  • 23
  • 词界

所以你的代码看起来像这样

 var result = Regex.Replace(input, @"\b23\b", "X");

另一种方法是拆分字符串,替换匹配元素并加入新字符串>

 var result = string.Join(";", input.Split(";").Select(v => v == "23" ? "X" : v));

更新:更新字典中的值

假设您知道密钥,这很容易:

 myDict["thekey"] = Regex.Replace(myDict["thekey"], @"\b23\b", "X");

如果您想对所有项目进行此替换,我会这样做,但我不确定这是否是最好的解决方案:

    [Fact]
    public void Replace_value_in_dict()
    {
        // given
        var mydict = new Dictionary<string, string>
        {
            { "key1", "donothing" },
            { "key2", "23;32;323;34;45" },
        };

        // when
        var result = mydict
            .Select(kv => (kv.Key, Regex.Replace(kv.Value, @"\b23\b", "X")))
            .ToDictionary(x => x.Item1, x => x.Item2);

        // then
        Assert.Equal(result, new Dictionary<string, string>
        {
            { "key1", "donothing" },
            { "key2", "X;32;323;34;45" },
        });
    }

推荐阅读