Regex заменить на группу в C # - PullRequest
       6

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

0 голосов
/ 24 декабря 2018

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

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

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

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

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

1 Ответ

0 голосов
/ 24 декабря 2018

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

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.

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