我有一个包含两列(pattern和neworder)和cca 100行(都有不同模式)的数据表。
我正在做的是将输入字符串与模式匹配(分组匹配),如果匹配,我想使用Regex.Replace命令重新排列检索到的组。
事情是Regex在循环中使用时不会非常友好。由于我必须将输入字符串与多个模式匹配,并重新排列输出字符串的外观,因此我完成此任务的唯一方法是使用Regex类。但这似乎不是一个合适的解决方案,因为它会显着降低性能。
代码看起来像这样
DataTable dt = this.GetPatterns();
DataRow dr;
System.Collections.IEnumerator ie = dt.Rows.GetEnumerator();
while(ie.MoveNext() && !found)
{
dr = ((DataRow)ie.Current);
pattern = dr["pattern"].ToString();
neworder= dr["neworder"].ToString();
Regex reg = new Regex(pattern, RegexOptions.IgnoreCase);
Match match = reg.Match(input_string);
if (match.Success)
{
found = true;
output = reg.Replace(input_string, neworder);
}
}
答案 0 :(得分:4)
如果使用静态方法进行匹配,.NET会自动为您编译Regex对象。
if (Regex.Match(input, pattern, options).Success)
{
output = Regex.Replace(input, pattern, neworder, options);
}
默认情况下,它仅缓存15个最近使用的对象,因此您可以通过调整Regex.CacheSize属性来增加它。