2013-08-16 1 views
1

J'ai un morceau de code HTML comme ceci:Python: Convertir citation dans le contenu HTML pas les balises 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> 

je dois convertir comme ceci:

<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> 

Je suis tripotent régulière expressions mais je n'arrive pas à me rapprocher. Je pense que mon choix est complètement faux.

Est-ce que quelqu'un peut me diriger dans la bonne direction si cela est possible?

+3

Vous devez utiliser un analyseur DOM (Je pense que [soupe Belle] (http://www.crummy.com/software/BeautifulSoup/) est bon en Python) puis traversez les nœuds de texte du DOM pour y effectuer uniquement le remplacement. Avec regex seul, vous ne serez pas en mesure de le faire de manière fiable. –

Répondre

2

Utilisez plutôt un analyseur HTML, puis remplacez simplement les guillemets par .replace('"', '&quot;').

BeautifulSoup rend cette tâche facile:

from bs4 import BeautifulSoup 

soup = BeautifulSoup(htmlsource) 

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

htmlsource = str(soup) 
+0

Je viens de remarquer qu'il convertit devis à & quot ;. Vous avez des idées pourquoi? – transilvlad

+0

Ah, parce que l'assignation au texte dans l'arbre BeautifulSoup auto-cite la chaîne. '&' est remplacé par '&' parce que c'est l'action correcte à prendre. –

+0

** En lisant ** le texte vous donnera '"' de nouveau car l'esperluette doit être automatiquement décochée par tout ce qui lit le texte du DOM. –