【问题标题】: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】:
当然可以,您编写的正则表达式调用不仅仅是检查子字符串是否存在:
-
它只检查整个单词。 "arf".Contains("a") == true,但是Regex.IsMatch("arf", @"\ba\b") == false。
-
它调用编译器来构建一个全新的代码块,创建一个新的应用程序域并将其加载到那里,然后调用它(跨应用程序域)。
后者尤其没有根据,因为您的正则表达式会更改每次搜索,因此无法重复使用来分摊编译和加载生成的代码的成本。绝对删除RegexOptions.Compiled 标志。
至于一般的正则表达式,我建议更新到 .Net 5,正则表达式匹配有高达 95% 的显着改进,尤其是像你这样的简单匹配。