给出以下正则表达式和两行输入:
replace (?<target>.*), but not (?<source>.*),
保持线条完好无损,替换我,但不是你,保留这一点。
保留我,替换一个,而不是两个,忽略三个。
我想用新的'target'值替换文本,这些值是根据'source'中的值计算的。保持文档的其余部分不变。
新的“目标”是一个复杂的计算,必须用纯C#计算。
如何做到这一点?
答案 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
以进行演示。请注意,在这种情况下,没有捕获目标组的点,您可以将其保留为非捕获组,或者根本不保留组。