2017-02-04 172 views
-1

我有一個帶有href超鏈接到特定文件的html文件。我想在這個文件中找到所有的href鏈接,並用該文件的絕對路徑替換鏈接。在python中查找並替換文本

<BR><CENTER><TABLE BORDER=1 CELLPADDING=0 NOSAVE><TR ALIGN=CENTER NOSAVE><TD COLSPAN="4" NOSAVE><CENTER><B>Summary Table</B></CENTER><TR><TD>Testname</TD><TD>Status</TD><TD>Link to HTML</TD><TD>Utility</TD></TR><TR><TD>test1</TD><TD>FAIL</TD><TD><A HREF= abc.html>HTML_report</a></BR></TD><TD>run</TD></TR><TR><TD>31Jan2017_03h12m52s</TD><TD>FAIL</TD><TD><A HREF=def.html>HTML_report</a></BR></TD><TD>run_2</TD></TR></TABLE></CENTER><BR> 

更換後,這看起來應該像 -

<BR><CENTER><TABLE BORDER=1 CELLPADDING=0 NOSAVE><TR ALIGN=CENTER NOSAVE><TD COLSPAN="4" NOSAVE><CENTER><B>Summary Table</B></CENTER><TR><TD>Testname</TD><TD>Status</TD><TD>Link to HTML</TD><TD>Utility</TD></TR><TR><TD>test1</TD><TD>FAIL</TD><TD><a href=common?htmlview=1&file="absolute_path to abc.html">HTML_report</a></BR></TD><TD>run</TD></TR><TR><TD>31Jan2017_03h12m52s</TD><TD>FAIL</TD><TD><a href=common?htmlview=1&file="absolute_path to def.html">HTML_report</a></BR></TD><TD>run_2</TD></TR></TABLE></CENTER><BR> 

我讀通過線的HTML文件中的行,所以一行可以有一個HREF中出現了多次。 我一直在使用應用re.sub找到和地方嘗試 -

re.sub(r'\sA\sHREF\s','a href=common?htmlview=1&file=<path>',line) 
+0

你爲什麼用正則表達式解析HTML? – jonrsharpe

+0

其中一個不簡單地用正則表達式解析html [出於這些原因](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags)。你可以使用[beautifulsoup](https://www.crummy.com/software/BeautifulSoup/bs4/doc/)。 – MYGz

+0

...你有問題嗎? – melpomene

回答

0

不要試圖用正則表達式來操作HTML,使用LIB如BeautifulSoup

from bs4 import BeautifulSoup 

soup = BeautifulSoup('<BR><CENTER><TABLE BORDER=1 CELLPADDING=0 NOSAVE><TR ALIGN=CENTER NOSAVE><TD COLSPAN="4" NOSAVE><CENTER><B>Summary Table</B></CENTER><TR><TD>Testname</TD><TD>Status</TD><TD>Link to HTML 
</TD><TD>Utility</TD></TR><TR><TD>test1</TD><TD>FAIL</TD><TD><A HREF= abc.html>HTML_report</a></BR></TD><TD>run</TD></TR><TR><TD>31Jan2017_03h12m52s</TD><TD>FAIL</TD><TD><A HREF=def.html>HTML_report</a></BR></TD 
><TD>run_2</TD></TR></TABLE></CENTER><BR>') 

for link in soup.find_all('a'): 
    link['href'] = 'fix the absolute path here %s' % (link.get('href'),) 

print soup.prettify() 
+0

這應該是一條評論。 – Toto

+0

@Toto通常我會同意,但我不能說「這不是爲了回答這個問題」,因爲這沒有問題。 – melpomene

+1

@melpomene:對,但沒有問題==>沒有答案。 – Toto