Regex заменить группой в C#

Я пытаюсь использовать замену регулярного выражения в C#, хотя у меня возникают некоторые проблемы с правильным выравниванием шаблона. Я хочу заменить определенные комбинации в соответствии с первыми двумя группами, но не в том случае, если они соответствуют шаблону третьей группы. То, что у меня есть до сих пор,

 var pattern = @"(,)|(\[\{)|(^:\[[*]])";

 string NewLineValue = Regex.Replace(LineValue, pattern,Environment.NewLine);

По сути, я хочу заменить все комбинации запятых или [{ в строке, но не, если запятая появляется в символах [[]] (например, [[1234,5678]])

Любая помощь высоко ценится...

Символ «^», помещенный в квадратные скобки, используется для создания класса символов отрицается. То, как вы его использовали в третьей группе, будет означать только то, что это начало текста.

shwartz 24.12.2018 16:18

Похоже, вы хотели разобрать файл JSON ...

Camilo Terevinto 24.12.2018 16:25

Короткий пример ввода и желаемый результат могут помочь. Кроме того, если вы не пытаетесь анализировать файл JSON, как угадал @CamiloTerevinto (вам могло бы быть проще, если да), попробуйте использовать отрицательный просмотр вперед. См .: regular-expressions.info/lookaround.html

shwartz 24.12.2018 16:33

@CamiloTerevinto, это конечная цель, однако в настоящий момент я пытаюсь поместить некоторые записи в читаемый формат, чтобы конечный пользователь мог определить, какие элементы требуются .... элементы строки в файле не соответствуют согласованному форматируйте их, поскольку они являются записями журнала активности и меняются построчно.

J B 24.12.2018 18:13

@shwartz, спасибо. Не могли бы вы уточнить, где нужно разместить символ «^», чтобы игнорировать «,», если он появляется в разделе [[x]]? Ваш совет очень ценен.

J B 24.12.2018 18:15
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
383
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно сопоставить и захватить все подстроки между [[ и ]] (для восстановления в результирующей строке), а затем сопоставить , или [{ во всех других контекстах, чтобы заменить их новой строкой:

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.

Другие вопросы по теме