Замена строки в C #, но только точный набор символов - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть следующая строка:

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

и я хочу заменить 23 на X, как показано ниже:

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

но когда я пытаюсь это сделать, я получаю это вместо:

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

Есть ли способ получить точный вывод?

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Вы должны использовать регулярное выражение

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

Рабочая образец

0 голосов
/ 07 сентября 2018

Вам понадобится регулярное выражение (регулярное выражение). Правило замены здесь

  • граница слова
  • 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" },
        });
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...