LINQ可以用于在字符串中搜索多个Regex表达式吗?

宁奇姆斯基

我有以下有效的代码,但想使用LINQ(或其他方法)加快速度,以查找目标中是否有任何Regex搜索字符串。

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 }

当前正在搜索要处理大量文件的长时间。有没有办法使.Any或.First更有效地完成呢?

wp78de

如所暗示的,可以通过All(要求满足所有条件)或Any(以某种||方式连接正则表达式条件来实现使用LinQ最简单的简化

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 }
}

但是,如果您要混合使用,则All/Any可能需要考虑编写自己的扩展方法,将两者结合使用,以避免多次评估输入。@jonskeet在这里有一个很好的例子

尽管如此,通过组合和优化您的正则表达式模式,可能会获得最大的收益。手动优化模式通常是最好的,但是您可以尝试以下两个Perl模块来自动完成它:

  • Dan Kogai的Regexp-Optimizer-0.23用于优化/组装模式
use Regexp::Optimizer;
my $o  = Regexp::Optimizer->new->optimize(qr/foobar|fooxar|foozap/);
# $re is now qr/foo(?:[bx]ar|zap)/

仅出于演示目的,将交替显示的样本模式输入优化器:
原始匹配模式:string1|string2变为优化的匹配模式:string[12]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

LINQ可以用于搜索字符串中的Regex表达式吗?

Swift正则表达式,用于在字符串中搜索格式说明符

使用正则表达式搜索数组中的多个字符串

Javascript:搜索字符串时数组中的多个表达式

使用regex表达式搜索字符串的python方式中更好代码的建议

我可以在Kotlin中转换模板表达式中的字符串或lambda表达式吗?

Java正则表达式,用于匹配字符串中的多个键

用于层次结构字符串中多个匹配项的正则表达式

正则表达式,RegEx,用于验证php中的复杂字符串

Java正则表达式用于字符串中的多个字符串模式

R中的regex strsplit表达式,因此它仅适用于每个字符串中首次出现的特定字符吗?

我可以对字符串进行条件检查以查看它是否在LINQ表达式内以“ 00”结尾吗?

使用正则表达式搜索字符串中的子字符串

用于检查字符串中是否存在一个或多个特殊字符的正则表达式

在 Python 2.7x 中使用正则表达式搜索字符串中的多个案例

Python正则表达式用于搜索子字符串

正则表达式,用于搜索字符串的各种格式

Python正则表达式搜索不适用于包含冒号(:)的字符串

用于搜索后跟 11 个数字的字符串的正则表达式

jQuery可以用于不在DOM中的html字符串吗?

多个正则表达式替换,会创建多个字符串吗?

用于在一个字符串中返回多个模式的正则表达式

使用GREP和正则表达式搜索多个字符串

正则表达式搜索多个字符串垃圾邮件

Linq 表达式不适用于可空字符串字段

表达式引擎中的'username'全局变量可以用于从mysql数据库中选择记录吗?

寻找 ruby regex 表达式以匹配字符串中可能按不同顺序排列的多个单词

可以编写正则表达式来查找大于x的字符串中的数字吗?

可以仅使用Python中的字符串方法来实现此正则表达式吗?