我正在学习正则表达式并遇到一个用例,其中有一个非常大的pdf,我的目的是根据以下内容过滤掉pdf中的内容:
我做了以下正则表达式:
((?:(?!((\sincoming|outgoing)\smessage)).)*keyword.*?)((incoming|outgoing)\smessage)
正则表达式对我来说非常适合用于1000页PDF格式的小文档,但它可以说是13000页的文档(在这种情况下代码运行超过12小时)。
我只从正则表达式结果中提取组(1)。我怀疑我所做的大量团队正在使它减速并迭代地运行匹配。但是,如果有人能够指导如何构建这样的正则表达式以及任何有效的替代方案,这将产生一个合适的时间框架,我将不胜感激。我在我的脚本中使用python 2.7。
示例文本可以是:
传入消息 传入消息 传入消息 关键词 abctext 关键词 传入消息 传入消息 gsgsfvhvhgh gfvgvhhhjjbn 765568856866
传入消息 传出消息 传入消息 91981966802866 关键词 其他文字 Dhai 20-12-2017 15:29:47 文本 传入消息
输出应为:
答案 0 :(得分:1)
以下(组0匹配):
显示1868步,而原始执行20020步,而不是
((?:(?!((\sincoming|outgoing)\smessage)).)*keyword.*?)((incoming|outgoing)\smessage)
从精确匹配开始而不是负向前瞻会减少回溯。