替换模板变量中的函数(用于评估)

本文关键字:用于 评估 函数 变量 替换 | 更新日期: 2023-09-27 18:20:35

我有一段类似的文本

仅使用{RAND(3,5)}颜色绘制{ITEM('duck','dog','cat')} 的图片

例如,我想做的是制作一个函数,扫描字符串,挑选出一组大括号中包含的所有文本,并将它们发送给一个函数。

public string GenerateReplacementString(string input);

其中输入将是RAND(3,5)或ITEM('duck','dog','cat'),函数将简单地从输入中返回生成的字符串。编写函数是我没有问题的部分,但我正在努力发现最有效的方法是扫描文本中的大括号。

起初我想在C#中使用Regex.Replace方法,但它只接受字符串(或char)替换,不能接受指向生成器函数的指针。

我想我可以一个字符一个字符地循环并找到所有{后跟}的实例,但这似乎非常缓慢和昂贵。

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

替换模板变量中的函数(用于评估)

Regex.Replace是否有接受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);
});