簡體   English   中英

在C#中替換字符串,但僅替換確切的字符集

[英]String replace in C# but only the exact character set

我有以下字符串:

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

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

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

但是當我嘗試它時,卻得到了這個:

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

有沒有辦法可以得到預期的輸出?

您將需要一個正則表達式(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" },
        });
    }

您應該使用正則表達式

var x="23;32;323;34;45";
var res = Regex.Replace(x,  @"\b23\b", "x");
Console.WriteLine(res);

工作樣本

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM