使用python正则表达式从html文件中提取文本的问题

时间:2010-07-31 13:00:44

标签: python html regex

我正在开发一个项目,需要我编写一些代码来从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,有什么我错过的吗?

3 个答案:

答案 0 :(得分:4)

  

关于正则表达式和HTML,有什么我错过的吗?

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

答案 1 :(得分:0)

浏览器所理解的HTML对于reg表达式来说太灵活了。属性可以在任何标记中,以任何顺序,大写或小写,以及有或没有关于值的引号中弹出。特殊重点标签可以显示在任何地方。空格在正则表达式中很重要,但在HTML中却不是很重要,因此你的正则表达式必须遍布\s*。不要求开始标记与结束标记匹配。一些开始标记包括尾部'/',这意味着它们是空标记(没有正文,没有结束标记)。最后,HTML通常是嵌套的,就正则表达而言,这几乎与图表不同。

答案 2 :(得分:0)

这实际上是你想要做的,或者只是一个更复杂的正则表达式的简单例子?如果是后者,请听取其他人的意见。如果是前者:

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

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