首先-我的代码有效。它只是运行缓慢,我想知道我是否遗漏了一些能让它更高效的方法。我正在用python解析pdf(是的,我知道如果可能的话应该尽量避免)。在
我的问题是我必须做几个相当复杂的正则表达式替换——当我说替换时,我的意思是删除。我已经做了那些首先去掉大部分数据的操作,这样下一个表达式就不需要分析太多的文本,但这就是我所能想到的加快速度的方法。在
我对python和regex还很陌生,所以很有可能会做得更好。在
谢谢你的阅读。在
regexPagePattern = r"(Wk)\d{1,2}.\d{2}(\d\.\d{1,2})"
regexCleanPattern = r"(\(continued\))?((II)\d\.\d{1,2}|\d\.\d{1,2}(II)|\d\.\d{1,2})"
regexStartPattern = r".*(II)(\s)?(INDEX OF CHARTS AFFECTED)"
regexEndPattern = r"(II.)\d{1,5}\((P|T)\).*"
contentRaw = re.sub(regexStartPattern,"",contentRaw)
contentRaw = re.sub(regexEndPattern,"",contentRaw)
contentRaw = re.sub(regexPagePattern,"",contentRaw)
contentRaw = re.sub(regexCleanPattern,"",contentRaw)
当试图解码字符串时,正则表达式总是最后的选择。所以如果你看到了解决问题的另一种可能性,那就用它。在
也就是说,你可以用重新编译要预编译正则表达式模式:
这会让事情加快一点(相当不错;)
我不确定你是不是在一个循环里做这个。如果没有,以下内容不适用。在
如果多次使用模式,则应使用
re.compile( ... )
编译它。这样,模式只编译一次。速度的增加应该是巨大的。最小示例:另一个想法:使用re.split( ... )而不是{},并使用数据的结果片段对数组进行操作。我不完全确定它是如何实现的,但我认为
re.sub
会创建文本片段并最终将它们合并到一个字符串中,这是非常昂贵的。在最后一步之后,您可以使用" ".join(fragments)
加入数组。显然,如果您的模式在某个地方重叠,这个方法将不起作用。在在更改之前和之后获取程序的时间信息是很有趣的。在
相关问题 更多 >
编程相关推荐