6

我最近切换到 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 在处理多个正则表达式模式时的行为有关。

谢谢!

4

3 回答 3

3

把事情简单化。

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

你不想遇到这个

于 2012-09-23T23:59:25.910 回答
2

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

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

于 2012-09-24T06:38:30.437 回答
1

我理解您关于“我正在清理的非 HTML 部分”的附加评论。由于后一个 RE 可能会查找和替换较早 RE 替换的内容,因此最好使用“替代”运算符并使用单个 RE。

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

于 2012-11-22T21:48:38.743 回答