Как заменить или добавить символ в список строк в запросе linq? - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть строка, подобная этой Hello [name] [lastname]

Затем я преобразовываю ее в list<string> на List<string> = "Hello [name] [lastname]".Split(" ").ToList()"

Проблема с этим мне нужно Hello [name] [lastname], чтобы быть 'Hello' name lastname и сохраняется в списке как этот.

Проблема изменения строки в том, что я не могу придумать, каким образом я могу удалить [ и ] и добавить одиночные квоты без необходимости go через строку несколько раз, используя множественные замены?

Можно ли сделать это одной командой? - как определение правила?

Ответы [ 2 ]

1 голос
/ 25 апреля 2020

Вы можете использовать регулярное выражение для идентификации слов и [токенов] из вашей строки. Затем, используя оценщик совпадений в Regex.Replace , вы можете применить свое пользовательское правило, чтобы заключать слова в одинарные кавычки, и для токенов группа захвата Regex уже сняла с нас окружающие квадратные скобки.

Например,

var output = Regex
    .Replace("Hello [name] [lastname]", @"\[(?<token>.+?)\]|(?<word>[^\s]+)", (match) =>
    {
        var wordMatch = match.Groups["word"];
        if (wordMatch.Success) return $"'{wordMatch.Value}'";
        return match.Groups["token"].Value;
    })
    .Split(' ')
    .ToList();

Выводит следующий список:

[0] 'Hello'
[1] name
[2] lastname
0 голосов
/ 25 апреля 2020

Если ваша входная строка всегда начинается с Hello, то решение будет:

List<string> output = new List<string>() { "'Hello'" }.Concat(input.Split(new char[] { '[', ' ', ']' }, StringSplitOptions.RemoveEmptyEntries).Skip(1)).ToList();

В противном случае, если первое слово вашей входной строки не является фиксированным, вы можете сделать:

List<string> output = new List<string>() { $"'{input.Split(' ')[0]}'" }.Concat(input.Split(new char[] { '[', ' ', ']' }, StringSplitOptions.RemoveEmptyEntries).Skip(1)).ToList();

Однако я бы рекомендовал разбивать этот код на несколько строк, а не делать это с помощью одной команды, как вы просили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...