Разделить строку с регулярным выражением запятыми? - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть шаблоны регулярных выражений, которые изменяют сопоставляемую строку ..

var output = Regex.Replace(entity.NamingPattern, @"\[(?<token>.+?)\]|(?<word>[^\[\]])", (match) =>
                    {
                        var wordMatch = match.Groups["word"];
                        if (wordMatch.Success) return $"'{wordMatch.Value}'";
                        return "new."+match.Groups["token"].Value;
                    });

, но также возможно гарантировать, что все сопоставляемые слова и токены разделяются запятой?

Итак, что-то вроде этого

(sommething[tester]somethi[worker]some[i]sadas,

возвращается, когда это

'(','s','o','m','m','e','t','h','i','n','g','new.tester','s','o','m','e','t','h','i','new.worker','s','o','m','e','new.i','s','a','d','a','s',','

Слово соответствует каждому символу, а токен соответствует содержимому в каждой квадратной скобке и удаляет скобки. но как я присоединяюсь, я не уверен в этом?

1 Ответ

2 голосов
/ 28 апреля 2020

Вы можете добавить запятую после группы word и добавить окружающие одинарные кавычки и запятую для группы token .

В конечном результате обрезать запятая в конце вывод с использованием TrimEnd

Жадная точка .*? в шаблоне также может быть отрицательным классом символов [^[\]]*

Pattern

\[(?<token>[^[\]]*)\]|(?<word>[^[\]])

. Net regex demo

Пример кода

var s  = "(sommething[tester]somethi[worker]some[i]sadas,";
var output = Regex.Replace(s, @"\[(?<token>[^[\]]*)\]|(?<word>[^[\]])", (match) =>
{
    var wordMatch = match.Groups["word"];
    if (wordMatch.Success) return $"'{wordMatch.Value}',";
    return "'new."+match.Groups["token"].Value+"',";
});
Console.WriteLine(output.TrimEnd(','));

Выход

'(','s','o','m','m','e','t','h','i','n','g','new.tester','s','o','m','e','t','h','i','new.worker','s','o','m','e','new.i','s','a','d','a','s',','
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...