【问题标题】:C# Replace with Callback Function like in AS3C# 替换为 AS3 中的回调函数
【发布时间】:2009-04-28 04:23:31
【问题描述】:

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

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

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

另外,是否有可能得到我要替换的东西的原始字符串?

(在AS3中你可以通过

得到原始字符串
var input:String = arguments[2]; //in the callback function

)

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

【问题讨论】:

    标签: c# regex actionscript-3 function replace


    【解决方案1】:
    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) 等)。

    【讨论】:

    • 是否可以获得我想要替换的原始字符串? (在 AS3 中,您可以通过 var input:String = arguments[2]; //在回调函数中获取原始字符串)我在 Mach 类中没有看到包含原始字符串的属性...
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多