在Python中使用多个正则表达式或更大的正则表达式替换

时间:2012-09-23 23:38:47

标签: python regex

我最近切换到了Python,我有兴趣通过删除一些特定的标签或其他字符串来清理大量的网页(大约12k)(但可以被视为非常容易的文本文件)图案。为此我在Python中使用re.sub(..)函数。

我的问题是,从效率的角度来看,创建一个匹配更多模式的大型正则表达式,或者使用更小更简单的正则表达式多次调用函数,是否更好。

举例来说,使用像

这样的东西会更好
 re.sub(r"<[^<>]*>", content)
 re.sub(r"some_other_pattern", content)

 re.sub(r"<[^<>]*>|some_other_pattern",content)

当然,为了举例说明以前的模式非常简单,我没有在这里编译它们,但在我的现实场景中,我会。

LE:这个问题与文件的HTML性质无关,而与处理多个正则表达式模式时Python的行为无关。

谢谢!

3 个答案:

答案 0 :(得分:3)

保持简单。

我会说使用较小的Regexes来解析这些东西更安全。至少就是这样,如果它表现异常,你不必去挖掘大量正则表达式的哪个特定部分表现得很奇怪。如果您对所做的替换有良好的记录,那么如果出现问题,确定问题的根源将是微不足道的。

您不希望遇到this

答案 1 :(得分:2)

一般来说,“顺序”和“并行”应用程序不一样,可能产生不同的结果,因为顺序替换会相互影响。

至于性能,我猜一个表达式会表现得更好,但这只是猜测。为了便于阅读,我个人更喜欢保持复杂并使用“详细”模式。

答案 2 :(得分:1)

我理解您对“我正在清理的非HTML部分”的补充评论。由于后者RE可能会找到并替换先前RE替换的内容,因此最好使用“替代”运算符并使用单个RE。

另外,请考虑使用BeautifulSoup加载和检查HTML文件。这有助于找到文本的适当部分,而在您打算替换某些文本时,捕获某些HTML构造的风险要小得多。