在AS3中,您在具有此签名的字符串上有一个函数:
function replace(pattern:*, repl:Object):String
repl:Object也可以指定一个函数。如果指定了一个函数,则插入函数返回的字符串代替匹配的内容。
另外,是否可以获取我想要替换的原始字符串?
(在AS3中,您可以通过
获取原始字符串var input:String = arguments[2]; //in the callback function
)
我在Match
类中看不到包含原始字符串的属性...
答案 0 :(得分:12)
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
)等。)
答案 1 :(得分:6)
为了在C#中执行此操作,请使用System.Text.RegularExpressions.Regex.Replace()
进行回调。
答案 2 :(得分:5)
正如一个例子,使现有答案绝对具体,并展示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的回答出现在我写这篇文章的时候,但我会把它作为一个完整的例子,除非有人认为这只是多余的。如果有人建议,我很乐意将其删除。)