现有数组 string[] s={a,b,c,d,....} 共10000个元素。
有字符串 string str="s435t4gfh5686g53415648643215637156785571d....."
只要数组中有一个元素能够在str中匹配到就算匹配成功
我是用
for(int i=0;i<s.length;i++)
{
Regex reg=gex(s[i]);
Match mac = reg.Match(str);
if(mac.Success)
break;
}
息率高呢还是用
string strreg="";
for(int i=0;i<s.length;i++)
{
strreg+=s[i]+"|";
}
Regex reg=gex(strreg);
Match mac = reg.Match(str);
if(mac.Success)上面两种执行效率哪个高?最好有原因。
有字符串 string str="s435t4gfh5686g53415648643215637156785571d....."
只要数组中有一个元素能够在str中匹配到就算匹配成功
我是用
for(int i=0;i<s.length;i++)
{
Regex reg=gex(s[i]);
Match mac = reg.Match(str);
if(mac.Success)
break;
}
息率高呢还是用
string strreg="";
for(int i=0;i<s.length;i++)
{
strreg+=s[i]+"|";
}
Regex reg=gex(strreg);
Match mac = reg.Match(str);
if(mac.Success)上面两种执行效率哪个高?最好有原因。
StringBuilder regexBuilder = new StringBuilder();
regexBuilder.Append("(?>");//整体捕获,也叫原子组。
foreach (string item in s)
{
regexBuilder.Append(Regex.Escape(item)+"|");
}
regexBuilder.Remove(regexBuilder.Length-1,1);//去掉最后一个|
regexBuilder.Append(")");
Regex reg = new Regex(regexBuilder.ToString(), RegexOptions.Compiled);
Match mac = reg.Match(str);
if (mac.Success)
完全是你的写法,只是用stringbuilder来优化多个string的拼接,如果按你说的关键词很多,那用stringbuilder是肯定会快的,匹配的时候,这个做法和你的做法一模一样,只是你写的是错的,最后多一个|,而且你的没考虑如果关键字中包含正则表达式的情况,比如有个关键字是\d。