2010-07-31 82 views
0

我正在研究一個項目,該項目需要我編寫一些代碼才能從python中的html文件中提取一些文本。我感興趣的HTML文件的使用python正則表達式從html文件中提取文本的問題

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

^小部分。

#! /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?

+1

http://www.codinghorror.com/blog/2009/11/parsing-html-the-cthulhu-way.html – deinst 2010-07-31 13:05:43

+1

請不要用正則表達式解析HTML(http://stackoverflow.com)/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454) – NullUserException 2010-07-31 13:21:51

+0

@deinst,很棒的鏈接,我笑了。 @OP,這是非常正確的一點。你只是不應該用正則表達式解析html。試試lxml或BeautifulSoup的魔力,你永遠不會想再回到正則表達式。 – 2010-07-31 13:30:33

回答

4

有沒有什麼我錯過了正則表達式和html?

是的。你錯過了一些HTML不能用簡單的正則表達式解析的事實。

+0

哎。我一直在想,以上只是匹配,因爲我唯一要搜索的就是「二進制」這個詞。雖然我明白,使用正則表達式來處理html不是一個好主意,但在這種情況下,我不明白爲什麼正則表達式不匹配,因爲我根本沒有處理標記。 – 2010-07-31 14:25:42

+0

@M Rubern C:你不能忽視標籤。如果您的「二進制」是'b inary'以使「b」變爲粗體? – 2010-07-31 15:51:18

0

瀏覽器可以理解的HTML對reg表達式來說太靈活了。屬性可以以任何標籤,以任意順序,大寫或小寫形式彈出,並且帶有或不帶有引號。特別強調標籤可以出現在任何地方。空格在正則表達式中很重要,但在HTML中卻不是那麼重要,所以你的正則表達式必須隨處可見地散佈着\s*。沒有要求開標籤與閉標籤匹配。一些開標籤包括尾隨的'/',意思是它們是空標籤(沒有身體,沒有結束標籤)。最後,HTML通常是嵌套的,就正則表達式而言,它幾乎不在圖表中。

0

這實際上是你想要做什麼,或者只是一個簡單的例子,爲更復雜的正則表達式以後?如果後者,傾聽其他人。如果是前者:

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

如果不工作,你肯定"binary"是在文件中?不,我不知道,"<i>b</i>inary"

+0

我打算使用正則表達式來解析,並試圖編寫簡單的例子來測試,但我一直堅信否則。我相信它看起來像 ​​目標二進制文件名: 只是困惑,爲什麼它不接。 – 2010-07-31 14:40:36

相關問題