【问题标题】:Regular expression taking long time to execcute [duplicate]正则表达式需要很长时间才能执行[重复]
【发布时间】:2020-07-21 18:08:59
【问题描述】:

我已使用此谓词生成器创建过滤器表达式以用于 LINQ 查询。 因此,虽然构建已经包含正则表达式来匹配某些条件,但是执行任何想法为什么或如何改进需要太长时间?

例如:

stringvalue.contains(word)

执行速度比:

Regex.IsMatch(stringvalue,@"\b"+word+@"\b",regexoptions.compiled)

【问题讨论】:

    标签: c# .net regex predicatebuilder


    【解决方案1】:

    当然可以,您编写的正则表达式调用不仅仅是检查子字符串是否存在:

    1. 它只检查整个单词。 "arf".Contains("a") == true,但是Regex.IsMatch("arf", @"\ba\b") == false

    2. 调用编译器来构建一个全新的代码块,创建一个新的应用程序域并将其加载到那里,然后调用它(跨应用程序域)。

    后者尤其没有根据,因为您的正则表达式会更改每次搜索,因此无法重复使用来分摊编译和加载生成的代码的成本。绝对删除RegexOptions.Compiled 标志。

    至于一般的正则表达式,我建议更新到 .Net 5,正则表达式匹配有高达 95% 的显着改进,尤其是像你这样的简单匹配。

    【讨论】:

      猜你喜欢
      • 2011-03-25
      • 1970-01-01
      • 2012-12-03
      • 2011-03-14
      • 2021-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多