我希望以一种良好的性能方式(我希望)将我的字符串中的命名参数替换为代码中的命名参数,例如,我的字符串:
"Hi {name}, do you like milk?"
我怎么能用代码,正则表达式替换{name}?贵吗?你推荐哪种方式?
他们如何将示例NHibernates HQL替换为:my_param为用户定义的值?或者在我更喜欢的ASP.NET(MVC)路由中,"{controller}/{action}",new {controller ="Hello",...}?
你确认正则表达式太贵吗?
正则表达式的成本被夸大了.对于这样一个简单的模式,性能会非常好,实际上可能只比直接搜索和替换略好.另外,Compiled
在构造正则表达式时,您是否尝试过标记?
那就是说,你能不能用最简单的方式,即Replace
?
string varname = "name"; string pattern = "{" + varname + "}"; Console.WriteLine("Hi {name}".Replace(pattern, "Mike"));
正则表达式当然是一个可行的选择,尤其是MatchEvaluator
:
Regex re = new Regex(@"\{(\w*?)\}", RegexOptions.Compiled); // store this... string input = "Hi {name}, do you like {food}?"; Dictionaryvals = new Dictionary (); vals.Add("name", "Fred"); vals.Add("food", "milk"); string q = re.Replace(input, delegate(Match match) { string key = match.Groups[1].Value; return vals[key]; });