9

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

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

repl:Object 也可以指定一个函数。如果您指定一个函数,则该函数返回的字符串将插入到匹配内容的位置。

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

(在 AS3 中,您可以通过

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

)

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

4

3 回答 3

13
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) 等)。

于 2009-01-14T08:16:23.373 回答
6

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

于 2009-01-14T08:12:46.220 回答
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 的答案出现在我写这篇文章的时候,但我会把它作为一个完整的例子留下来,除非有人认为它只是多余的。如果有建议,我很乐意删除它。)

于 2009-01-14T08:17:57.740 回答