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

C# 替换模板变量中的函数(用于评估),c#,regex,string,C#,Regex,String,我有一段文字,比如 仅使用{RAND(3,5)}颜色 画一幅{ITEM('duck','dog','cat')} 我想做的是创建一个函数,它扫描字符串,然后用一组大括号挑出包含的所有文本,然后将它们发送给一个函数,例如 public string GenerateReplacementString(string input); 其中输入为RAND(3,5)或ITEM('duck'、'dog'、'cat'),函数只需从输入返回生成的字符串。编写函数是我没有问题的部分,但是我试图发现最有效的方法是

我有一段文字,比如

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

我想做的是创建一个函数,它扫描字符串,然后用一组大括号挑出包含的所有文本,然后将它们发送给一个函数,例如

public string GenerateReplacementString(string input);
其中输入为RAND(3,5)或ITEM('duck'、'dog'、'cat'),函数只需从输入返回生成的字符串。编写函数是我没有问题的部分,但是我试图发现最有效的方法是扫描文本中的大括号

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

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


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

Regex.Replace
does(“生成器函数”),用于确定要动态执行的操作

在指定的输入字符串中,用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);
});
Regex.Replace(输入,@{(.*)},(m)=>{
//使用m(匹配对象)并创建正确的输出
返回string.Format(“,m.Groups[1].Value.Length);
});

您认为有一种方法可以检查字符串中的所有字符,而不必循环检查它们?对不起,这是一种错误的措辞,不必尝试构建一个打开和关闭{}堆栈并存储每个字符的打开和关闭位置;)作为Eric评论的后续,RegEx将在文本中循环(黑匣子,但仍然会发生),它的效率将低于为解决此特定模式匹配问题而优化的代码。这不是该问题的重复,那很容易!谢谢这是漫长的一天:P