C#替换为回调函数,如AS3中所示

在AS3中,您在具有此签名的字符串上有一个函数:

function replace(pattern:*, repl:Object):String 

repl:Object也可以指定一个函数。 如果指定了函数,则会插入函数返回的字符串以代替匹配的内容。

另外,是否可以获取我想要替换的原始字符串?

(在AS3中,您可以获取原始字符串

 var input:String = arguments[2]; //in the callback function 

我没有在Match类中看到包含原始字符串的属性…

为了在C#中执行此操作,请使用System.Text.RegularExpressions.Regex.Replace()进行回调。

 static void Main() { string s1 = Regex.Replace("abcdefghik", "e", match => "*I'm a callback*"); string s2 = Regex.Replace("abcdefghik", "c", Callback); } static string Callback(Match match) { return "*and so am i*"; } 

请注意,您可以通过参数访问匹配的数据(特别是match.Value ,除非您想要访问正则表达式组( .Groups )等)。

正如一个例子,使现有的答案绝对具体,并展示lambda表达式如何方便:

 using System; using System.Text.RegularExpressions; class Test { static void Main() { var template = "On $today$ you need to do something."; var regex = new Regex(@"\$today\$"); var text = regex.Replace(template, match => DateTime.Now.ToString("d")); Console.WriteLine(text); } } 

(Marc的答案出现在我写这篇文章的时候,但是我会把它作为一个完整的例子,除非有人认为它只是多余的。如果有人提议,我很乐意删除它。)