我有一段类似
的文字仅使用
的照片{RAND(3,5)}
种颜色 画一幅{ITEM('duck','dog','cat')}
我尝试做的是创建一个函数来扫描字符串并选取包含一组大括号的所有文本,并将它们发送到函数中。
public string GenerateReplacementString(string input);
输入将是RAND(3,5)或ITEM(' duck',' dog',' cat')并且该功能只会返回一个从输入生成字符串。编写函数是我没有问题的部分,但是我试图发现扫描文本的最有效方法是什么。
我首先想到在C#中使用Regex.Replace
方法,但是这只接受字符串(或char)替换,并且不能接受指向生成器函数的指针。
我想我可以遍历并逐个字符地找到{后跟}的所有实例,但这看起来非常缓慢且昂贵。
是否有一些方法我不允许动态搜索和替换您可能不知道字符串的确切值的函数?
答案 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);
});