【发布时间】:2018-07-14 15:16:00
【问题描述】:
我想在缩进的代码中搜索不以井号 (#) 开头的行。
目前,我正在使用正则表达式 ^\s*([^\s#].*) 并启用了多行选项。
我的问题是,在没有注释的行上它工作得很好。
由于\s* 从注释符号到行首,正则表达式引擎在注释行上执行回溯,这有时会导致 40 或 50 个回溯步骤。
正则表达式在 python 代码上完美运行。由于引擎导致的回溯,它的效率不是很高。
知道如何避免它吗?
奖励:正则表达式引擎无法识别它在\s* 中一一搜索[^\s] 并导致这么多的回溯,这很有趣。使重新引擎工作的挑战是什么?
奖励 2:仅使用 stdlib re 模块。因为我无法添加第 3 方。 (我在技术上使用 sublime text 进行搜索,但想知道如何在 Python 中进行搜索)
【问题讨论】:
-
@Alex erm,它正在工作。期望的输出是更少的回溯。
-
有什么理由不
split\n上的字符串,然后将每一行与更简单的正则表达式进行比较? -
是的,我实际上在使用 sublime text 的正则表达式查找功能。不想编辑代码。
标签: python regex python-3.x backtracking negative-lookahead