如何在Python中优化正则表达式匹配搜索

2024-09-28 18:12:52 发布

您现在位置:Python中文网/ 问答频道 /正文

节目

我正在构建一个程序,跟踪步骤定义涵盖的功能文件步骤。例如,我可能有一个功能步骤I should not click on the panel。此功能步骤与步骤定义I {qualifier} click on the {place}匹配,假设{qualifier}映射到(should not|should),而{place}映射到(panel|page)

对于与步骤定义匹配的每个特征步骤,我希望跟踪它实际匹配的步骤定义。所以我需要在I should not click on the panelI {qualifier} click on the {place}之间建立一个连接

对于每个不匹配任何步骤定义的特征步骤,我将生成一个步骤定义,并将这两个步骤连接起来

问题

现在我把每一步定义都转换成正则表达式,比如

I {qualifier} click on the {place}将转换为(I (should not|should) click on the (panel|page))

我使用的是Python字典,其中键是转换后的正则表达式,值是原始步骤定义

当我完成每个特征步骤并试图将它们连接到匹配的步骤定义时,我的问题就出现了。我目前只是循环遍历每一个正则表达式,并尝试将其与功能步骤相匹配,类似这样的

# every feature_step gets sent through this check

for regex in all_step_definition_regex:
    if re.match(regex, feature_step):
        step_definition = regex_to_step_definition_map[regex]
        return True, step_definition

return False, None

当必须检查每个功能步骤以查看它是否与任何单个正则表达式匹配时,这需要花费非常长的时间来运行。加速初始检查的一种方法是将每个正则表达式与一个'or'likere.match('|'.join(all_step_definition_regex), feature_step)连接在一起,但是我无法将功能步骤与其匹配的步骤定义连接起来,而不通过所有单个正则表达式进行循环

我想知道是否有人知道如何加快这个过程


Tags: the功能定义onstepnot步骤place