2013-08-16 77 views
1

我有這樣一段HTML的:的Python:轉換報價在HTML內容不是HTML標籤

<pre class="script">template("main/GlobalShared");</pre> 
<pre class="script"> 
var link = '/Draft/Tracker_1.1'; 
if (wiki.pageexists(link)) { 
    &lt;div class="version"&gt; web.link(wiki.uri(link), 'Version 1.1') &lt;/div&gt; 
} 
</pre> 

我需要將其轉換是這樣的:

<pre class="script">template(&quot;main/GlobalShared&quot;);</pre> 
<pre class="script"> 
var link = '/Draft/Tracker_1.1'; 
if (wiki.pageexists(link)) { 
    &lt;div class=&quot;version&quot;&gt; web.link(wiki.uri(link), 'Version 1.1') &lt;/div&gt; 
} 
</pre> 

我一直在擺弄定期表達式,但我似乎無法接近。 我認爲我的選擇是完全錯誤的。

任何人都可以指出我在正確的方向,如果這是可能的?

+3

你應該使用DOM解析器(我認爲[美麗的湯(http://www.crummy.com/software/BeautifulSoup/)是很好的在Python)然後遍歷DOM的文本節點以僅在那裏進行替換。只用正則表達式,你將無法可靠地做到這一點。 –

回答

2

改爲使用HTML解析器,然後簡單地用.replace('"', '&quot;')替換引號。

BeautifulSoup使得這個任務很簡單:

from bs4 import BeautifulSoup 

soup = BeautifulSoup(htmlsource) 

for string in soup.strings: 
    string.replace_with(string.replace('"', '&quot;')) 

htmlsource = str(soup) 
+0

我剛剛注意到它將報價轉換爲&「。有什麼想法爲什麼? – transilvlad

+0

啊,因爲分配給BeautifulSoup樹中的文本會自動引用它的字符串。 '&'替換爲'&',因爲這是正確的操作。 –

+0

**閱讀**文本將再次爲您提供'"',因爲&符號將被讀取DOM文本的任何內容自動引用。 –