c# - 检查同一字符串上超过 1500 个正则表达式模式匹配的最快方法

标签 c# regex

我有超过 1500 个给定的正则表达式模式,需要在相同的 100 - 200 kb 文本文件上运行并返回成功模式列表。文件来自外部,因此我无法对该文件做任何假设。

问题是,我能否以某种方式使处理速度比对同一文本运行所有这些正则表达式更快?

逻辑上输入文件是相同的,后面的正则表达式可以使用一些已经处理过的信息。如果我们认为每个正则表达式都是有限自动的,那么对同一文本运行 1500 个有限自动肯定比运行一个连接的自动慢。所以问题是,我能否以某种方式创建连接的正则表达式?

最佳答案

这是利用线程的绝佳机会。将您要处理的文件读入一个字符串,然后启动一系列消费者线程。让您的主线程将每个正则表达式放入一个队列,然后让消费者中断队列的下一部分,编译正则表达式,并在字符串上运行它。共享内存意味着您可以在同一个字符串上运行多个表达式,即使在性能较差的计算机(2 核,非超线程)上,如果您将使用者池保持在合理的大小,您也会注意到速度的显着提升。在一个非常大的服务器上——比如 32 个超线程内核?您可以拥有一个不错的脂肪池并立即通过这些正则表达式。

关于c# - 检查同一字符串上超过 1500 个正则表达式模式匹配的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19934636/

相关文章:

sql - DB2 LIKE 匹配模式

c# - SmtpClient 发送邮件两次

c# - 为什么 double.TryParse ("0.0000", out doubleValue) 返回 false ?

python - 处理正则表达式中的特殊字符

regex - 如何在Perl正则表达式中使用/r标志?

c++ - 正则表达式语法 - 帮助

PHP 在一个输入中分隔两个不同的部分

c# - 如何为信封定义设置过期设置?

c# - 使用 Visual Studio 测试运行程序运行的 xUnit 测试的输出未显示在“输出”窗口中

c# - 是否可以将字符串转换为我自己的类型?