繁体   English   中英

Python html2text正则表达式性能

[英]Python html2text regex performance

我已经建立了一个HTML到纯文本正则表达式序列。 我在多达100个线程中使用它来清理html文件。 我想获取给定html文件的所有可见文本信息。

    self.content = re.sub(r'<!--(.|\n)*?-->', '', self.content)
    self.content = re.sub(r'<script (.|\n)*?>(.|\n)*?</script>', '', self.content)
    self.content = re.sub(r'<style (.|\n)*?>(.|\n)*?</style>', '', self.content)
    self.content = re.sub(r'(<[^>]*?>+)', ' ', self.content)

我不是真正的正则表达式专业人士。 也许我可以改善此正则表达式的性能?

我不想使用beautifulsoap或django或html2text c ++发行版。 他们经过测试比我的正则表达式慢。 我只需要一个用空格分隔的字符串,而不需要一棵树或链接等。

感谢您的帮助。 我知道在stackoverflow上有一些非常聪明的人

使用类似BeautifulSoup或htmllib之类的工具,不要试图比世界其他地方更聪明。 使用正则表达式解析HTML是您最糟糕的事情! 总是会有一个HTML文件,您的正则表达式将失败。

有一个共同的信条,即必须使用正则表达式工具来处理HTML和XML文本。 您必须考虑到,如果为实现宏伟目标而实施此类治疗的风险是真实存在的,并且无法管理。 HTML和XML是太多复杂的标记语言,因此正则表达式无法分析。

但是,我并不完全认同这一共同信条。 在我看来,如果在考虑到将风险降到最低的情况下可以合理地认为正则表达式被合理使用的前提下,谨慎地使用正则表达式并不是一种荒谬的方法。

  • 我相信正则表达式可用于HTML或XML文本的有限和简单处理。 我在stacoverflof.com上确实了解到,用正则表达式解析HTML / XML是不切实际的。 但是,当处理中没有暗示解析 (提取标记树的全部或一部分)时,为什么要如此虔诚地拒绝正则表达式(我暗示所引用的链接)

  • 在我看来,一个很好的安全步骤是使用正则表达式工具限制仅对源于常量的文本使用代码,而不是试图使其分析各种HTM或XML文本。

在收到这些警告后,我敢向您提出以下对您的RE的改进建议:

re.sub('<!--.*?-->', '', self.content, flags=re.DOTALL)

re.sub('<(script|style) .*?\\1>', '', self.content, flags=re.DOTALL)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM