2013-08-16 41 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文本的任何内容自动引用。 –