我有多个文件,每个文件都在搜索一系列单词。
我的正则表达式基本上搜索 word1 后跟 word2 后跟 word 3 等的序列。所以表达式看起来像:
strings = re.findall('word1.*?word2.*?word3', f.read(), re.DOTALL)
对于 20kb 以下的文件,表达式执行得很好。但是,对于大于 20 kb 的文件,执行时间会成倍增加,并且对于接近 100 kb 的文件,进程会完全挂起。看来(在阅读了以前的线程之后)问题与使用 .* 和 re.DOTALL 相关 - 导致“灾难性回溯”。推荐的解决方案是逐行提供输入文件,而不是将整个文件读入单个内存缓冲区。
但是,我的输入文件充满了随机空格和“\n”换行符。我的单词序列也很长,并且出现在多行中。因此,我需要将整个文件连同 re.DOTALL 一起输入到正则表达式中 - 否则逐行搜索将永远找不到我的序列。
有什么办法吗?