【问题标题】:Problem extracting text out of html file using python regex使用python regex从html文件中提取文本的问题
【发布时间】:2010-08-01 03:58:57
【问题描述】:

我正在做一个项目,该项目需要我编写一些代码来从 python 中的 html 文件中提取一些文本。

<tr>
<td>Target binary file name:</td>
<td class="right">Doc1.docx</td>
</tr>

^我感兴趣的 html 文件的一小部分。

#! /usr/bin/python
import os
import re    

if __name__ == '__main__':
    f = open('./results/sample_result.html')
    soup = f.read()
    p = re.compile("binary")
    for line in soup:
        m = p.search(line)
        if m:
            print "finally"
            break

^我编写的示例代码来测试是否可以提取数据。 我已经编写了几个与此类似的程序来从 txt 文件中提取几乎完全相同的文本,并且它们工作得很好。关于正则表达式和 html,我有什么遗漏吗?

【问题讨论】:

标签: python html regex


【解决方案1】:

关于正则表达式和 html,我有什么遗漏的吗?

是的。您错过了一些 HTML 无法用简单的正则表达式解析的事实。

【讨论】:

  • 哎哟。我在想上面的内容会简单匹配,因为我唯一要搜索的是“二进制”这个词。虽然我知道使用正则表达式处理 html 不是一个好主意,但在这种情况下,我不明白为什么正则表达式不匹配,因为我根本不处理标签。
  • @M Rubern C:你不能忽略标签。如果您的“二进制”是&lt;b&gt;b&lt;/b&gt;inary 以使“b”加粗怎么办?
【解决方案2】:

这实际上是您想要做的,还是只是稍后更复杂的正则表达式的简单示例?如果是后者,请听听其他人的意见。如果是前者:

for line in file:
      if "binary" in line:
            # do stuff

如果这不起作用,您确定 "binary" 在文件中吗?不,我不知道,"&lt;i&gt;b&lt;/i&gt;inary"

【讨论】:

  • 我打算使用正则表达式进行解析并尝试编写简单的示例进行测试,但我已经被说服了。我确定它显示为 Target binary file name: 只是不明白为什么它不接。
【解决方案3】:

浏览器理解的 HTML 对于 reg 表达式来说太灵活了。属性可以以任何标签、任何顺序、大小写、值的引号或不带引号的方式弹出。特别强调标签可以出现在任何地方。空格在正则表达式中很重要,但在 HTML 中并不重要,因此您的正则表达式必须到处都是\s*。不要求开始标签与结束标签匹配。一些开始标签包含一个尾随的“/”,这意味着它们是空标签(没有正文,没有结束标签)。最后,HTML 经常是嵌套的,就正则表达式而言,这几乎不在图表中。

【讨论】:

    猜你喜欢
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 2021-07-30
    • 1970-01-01
    • 2016-12-20
    相关资源
    最近更新 更多