C# LINQ可以用于搜索字符串中的多个正则表达式吗?
我有下面的代码可以工作,但我想使用LINQ(或其他东西)来加速它,以查找目标中是否有任何正则表达式搜索字符串C# LINQ可以用于搜索字符串中的多个正则表达式吗?,c#,regex,linq,C#,Regex,Linq,我有下面的代码可以工作,但我想使用LINQ(或其他东西)来加速它,以查找目标中是否有任何正则表达式搜索字符串 List<Regex> Filters = new List<Regex>(); Filters.Add(new Regex("string1", RegexOptions.IgnoreCase)); Filters.Add(new Regex("string2", RegexOptions.Compile)); ... bool found = false st
List<Regex> Filters = new List<Regex>();
Filters.Add(new Regex("string1", RegexOptions.IgnoreCase));
Filters.Add(new Regex("string2", RegexOptions.Compile));
...
bool found = false
string target = "string which may contain string1 or string2 or neither";
foreach (Regex r in Filters) {
if (r.IsMatch(target)) {
found = true;
break; // get out as soon as found
}
}
if (found) { // do stuff }
列表过滤器=新列表();
Filters.Add(新的正则表达式(“string1”,RegexOptions.IgnoreCase));
Filters.Add(newregex(“string2”,RegexOptions.Compile));
...
bool found=false
string target=“可能包含string1或string2或两者都不包含的字符串”;
foreach(过滤器中的Regex r){
如果(r.IsMatch(目标)){
发现=真;
break;//一找到就马上出去
}
}
如果(找到){//do stuff}
搜索当前正在处理的大型文件需要很长时间。
有没有一种方法可以使.Any或.首先更有效地完成此操作?正如所暗示的,使用LinQ最简单的简化可以通过
All
(要求满足所有条件)或Any
(以|
方式连接正则表达式条件)实现
仅出于演示目的,将您的样本模式与备选方案一起提供给优化器:原始匹配模式:
string1 | string2
成为优化的匹配模式:string[12]
- 允许您在线执行相同的操作
if(Filters.FirstOrDefault(x=>x.IsMatch(target))!=null)
这是一个统计关系。
List<Regex> Filters = new List<Regex>();
Filters.Add(new Regex("string1", RegexOptions.IgnoreCase, RegexOptions.Compiled));
Filters.Add(new Regex("string2", RegexOptions.Compiled));
string target = "string which may contain string1 or string2 or neither";
if (Filters.Any(x => x.IsMatch(target)))
{
// do stuff }
}
use Regexp::Optimizer;
my $o = Regexp::Optimizer->new->optimize(qr/foobar|fooxar|foozap/);
# $re is now qr/foo(?:[bx]ar|zap)/