正则表达式在C#中按组替换

时间:2018-12-24 15:04:41

标签: c# regex replace

尽管我在使模式正确对齐方面遇到一些问题,但我仍尝试在C#中使用正则表达式替换。我想做的是根据前两个组替换某些组合,但是如果它与第三组的模式匹配,则不进行替换。到目前为止,我是

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

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

基本上,我想替换字符串中的所有逗号或[{组合,但是如果逗号出现在[[]]个字符(例如[[1234,5678]])之内,则不要替换

非常感谢您的帮助...

1 个答案:

答案 0 :(得分: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),否则,匹配项(,[{)被替换为{ {1}}。