2010-04-29 12 views
1

je dois souligner une adresse e-mail dans le texte, mais pas les mettre en évidence si contenu dans les balises HTML, le contenu ou les attributs.adresses e-mail Match qui ne figurent pas dans la balise HTML

Par exemple, la chaîne [email protected] doit être converti en <a href="mailto:[email protected]">[email protected]</a>

Mais adresses e-mail dans la chaîne <a href="mailto:[email protected]">[email protected]</a> ne doit pas être traitée.

J'ai essayé quelque chose comme ça regexp:

(?<![":])[a-zA-Z0-9._%-+][email protected][a-zA-Z0-9._%-]+.[a-zA-Z]{2,6}(?!")

mais il ne fonctionne pas correctement.

+0

double: http://stackoverflow.com/questions/401726/regex-that-only-matches-text-thats-not-part-of-html-markup-python – msw

Répondre

1

Je suppose que votre texte source est un fichier HTML qui manque les balises d'ancrage pour seulement quelques-unes des adresses e-contenaient courriel. Si cela est vrai, vous ne pourrez pas utiliser une expression rationnelle pour correspondre de manière fiable uniquement aux adresses de messagerie non étiquetées. Par exemple, compte tenu de l'entrée:

... 
<P>You'll find a lot more written by <A 
href="mailto:[email protected]" 
title="some text including [email protected]"> 

[email protected] 
</A>. 
</P> 
... 

il devient impossible d'associer lexicalement l'href à l'adresse et également exclure [email protected]. Vous devez utiliser un analyseur HTML; BeautifulSoup est très populaire.