Я пытаюсь использовать замену регулярного выражения в C#, хотя у меня возникают некоторые проблемы с правильным выравниванием шаблона. Я хочу заменить определенные комбинации в соответствии с первыми двумя группами, но не в том случае, если они соответствуют шаблону третьей группы. То, что у меня есть до сих пор,
var pattern = @"(,)|(\[\{)|(^:\[[*]])";
string NewLineValue = Regex.Replace(LineValue, pattern,Environment.NewLine);
По сути, я хочу заменить все комбинации запятых или [{ в строке, но не, если запятая появляется в символах [[]] (например, [[1234,5678]])
Любая помощь высоко ценится...
Похоже, вы хотели разобрать файл JSON ...
Короткий пример ввода и желаемый результат могут помочь. Кроме того, если вы не пытаетесь анализировать файл JSON, как угадал @CamiloTerevinto (вам могло бы быть проще, если да), попробуйте использовать отрицательный просмотр вперед. См .: regular-expressions.info/lookaround.html
@CamiloTerevinto, это конечная цель, однако в настоящий момент я пытаюсь поместить некоторые записи в читаемый формат, чтобы конечный пользователь мог определить, какие элементы требуются .... элементы строки в файле не соответствуют согласованному форматируйте их, поскольку они являются записями журнала активности и меняются построчно.
@shwartz, спасибо. Не могли бы вы уточнить, где нужно разместить символ «^», чтобы игнорировать «,», если он появляется в разделе [[x]]? Ваш совет очень ценен.





Вам нужно сопоставить и захватить все подстроки между [[ и ]] (для восстановления в результирующей строке), а затем сопоставить , или [{ во всех других контекстах, чтобы заменить их новой строкой:
var pattern = @"(?s)(\[\[.*?]])|,|\[{";
var result = Regex.Replace(s, pattern, m =>
m.Groups[1].Success ? m.Groups[1].Value : Environment.NewLine);
Шаблон соответствует:
(?s) - встроенный вариант RegexOptions.Singleline(\[\[.*?]]) - Группа 1: [[, любые символы 0+, как можно меньше, а затем ]]| - или, - запятая| - или\[{ - подстрока [{.Если группа 1 совпадает (m.Groups[1].Success), совпадение вставляется обратно (m.Groups[1].Value), иначе совпадение (, или [{) заменяется на Environment.NewLine.
Символ «^», помещенный в квадратные скобки, используется для создания класса символов отрицается. То, как вы его использовали в третьей группе, будет означать только то, что это начало текста.