正则表达式基于另一个命名组替换一个命名组

时间:2016-02-02 13:22:50

标签: c# regex replace

给出以下正则表达式和两行输入:

replace (?<target>.*), but not (?<source>.*),
  

保持线条完好无损,替换我,但不是你,保留这一点。

     

保留我,替换一个,而不是两个,忽略三个。

enter image description here

我想用新的'target'值替换文本,这些值是根据'source'中的值计算的。保持文档的其余部分不变。

新的“目标”是一个复杂的计算,必须用纯C#计算。

如何做到这一点?

1 个答案:

答案 0 :(得分:0)

正如我在评论中提到的,你可以使用匹配评估器:

var line = "Keeping the line intact, replace me, but not you, keep this too.\n\nRetaining me, replace one, but not two, ignore three.";
var res = Regex.Replace(line, @"replace (?<target>.*), but not (?<source>.*),",
          m => "replace " + m.Groups["source"].Value.Replace("o", "1") + ", but not " + m.Groups["source"].Value + ",");
Console.WriteLine(res);

请参阅IDEONE demo

我刚刚在第一个捕获组中用o替换了所有1以进行演示。请注意,在这种情况下,没有捕获目标组的点,您可以将其保留为非捕获组,或者根本不保留组。