Заменить все вхождения символа табуляции в двойные кавычки

В конце концов, я захочу заменить все \t, заключенные в ", которые я сейчас использую Regex101, пробуя различные итерации моего регулярного выражения... Это самое близкое, что у меня есть до сих пор...

originString = blah\t\"blah\tblah\"\t\"blah\"\tblah\tblah\t\"blah\tblah\t\tblah\t\"\t\"\tbleh\"
regex = \t?+\"{1}[^"]?+([\t])?+[^"]?+\"
\t?+       maybe one or more tab
\"{1}      a double quote
[^"]?+     anything but a double quote
([\t])?+   capture all the tabs
[^"]?+     anything but a double quote
\"{1}      a double quote

Моя логика ошибочна! Мне нужна ваша помощь в группировке символов табуляции.


person blaze_125    schedule 11.08.2017    source источник


Ответы (2)


Сопоставьте подстроки в двойных кавычках с простым регулярным выражением "[^"]+" (если нет управляющих последовательностей для учета) и замените вкладки внутри совпадений только внутри оценщика совпадений:

var str = "A tab\there \"inside\ta\tdouble-quoted\tsubstring\" some\there";
var pattern = "\"[^\"]+\""; // A pattern to match a double quoted substring with no escape sequences
var result = Regex.Replace(str, pattern, m => 
        m.Value.Replace("\t", "-")); // Replace the tabs inside double quotes with -
Console.WriteLine(result);
// => A tab here "inside-a-double-quoted-substring" some    here

См. демонстрацию C#.

person Wiktor Stribiżew    schedule 11.08.2017
comment
Идеально и намного проще, чем то, что я пытался сделать! Благодарю вас! - person blaze_125; 11.08.2017

вы можете использовать это:

\"[^\"]*\"

первоначально ответил здесь

person Abiezer    schedule 11.08.2017