替换模板变量中的函数(进行评估)

时间:2014-09-03 00:48:51

标签: c# regex string

我有一段类似

的文字
  

仅使用{RAND(3,5)}种颜色   画一幅{ITEM('duck','dog','cat')}

的照片

我尝试做的是创建一个函数来扫描字符串并选取包含一组大括号的所有文本,并将它们发送到函数中。

public string GenerateReplacementString(string input);

输入将是RAND(3,5)或ITEM(' duck',' dog',' cat')并且该功能只会返回一个从输入生成字符串。编写函数是我没有问题的部分,但是我试图发现扫描文本的最有效方法是什么。

我首先想到在C#中使用Regex.Replace方法,但是这只接受字符串(或char)替换,并且不能接受指向生成器函数的指针。

我想我可以遍历并逐个字符地找到{后跟}的所有实例,但这看起来非常缓慢且昂贵。

是否有一些方法我不允许动态搜索和替换您可能不知道字符串的确切值的函数?

1 个答案:

答案 0 :(得分:1)

Regex.Replace 执行 have an overload that accepts a MatchEvaluator(“生成器函数”),这对于确定动态操作非常有用。

  

在指定的输入字符串中,将匹配指定正则表达式的所有字符串替换为MatchEvaluator委托返回的字符串。

例如;

Regex.Replace(input, @"{(.*?)}", (m) => {
    // Use m (a Match object) and create the correct output
    return string.Format("<<Length:{0}>>", m.Groups[1].Value.Length);
});