当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《C#替换为回调函数,如AS3中所示》经验,为你挑选了3个好方法。

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

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

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

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

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

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

)

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



1> Marc Gravell..:
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)等).



2> Konrad Rudol..:

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



3> Jon Skeet..:

正如一个例子,使现有的答案绝对具体,并展示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的答案出现在我写这篇文章的时候,但是我会把它作为一个完整的例子,除非有人认为它只是多余的.如果有人提议,我很乐意将其删除.)

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有