2009-01-24 8 views
4

Je suis en train de faire une expression régulière qui permettra de saisir correctement les URL, y compris ceux qui sont enveloppées entre parenthèses comme dans (http://example.com) et parlé de l'horreur de codage à http://www.codinghorror.com/blog/archives/001181.htmlPython Regular Expression pour ajouter des liens vers des urls

J'utilise actuellement ce qui suit pour créer des balises HTML A en python pour les liens commençant par http et www.

r1 = r"(\b(http|https)://([-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|]))" 
r2 = r"((^|\b)www\.([-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|]))" 
return re.sub(r2,r'<a rel="nofollow" target="_blank" href="http://\1">\1</a>',re.sub(r1,r'<a rel="nofollow" target="_blank" href="\1">\1</a>',text)) 

Ceci fonctionne bien sauf dans le cas où quelqu'un enveloppe l'url en parens. Est-ce que quelqu'un a un meilleur moyen?

Répondre

4

Le problème est, les URL pourraient avoir une parenthèse comme partie d'eux ... (http://en.wikipedia.org/wiki/Tropical_Storm_Alberto_(2006)). Vous ne pouvez pas traiter cela avec regexp seul, car il n'a pas d'état. Vous avez besoin d'un analyseur. Donc, votre meilleure chance serait d'utiliser un analyseur, et essayez de deviner la bonne parenthèse fermante. C'est sujet aux erreurs (l'url pourrait ouvrir une parenthèse et ne jamais la fermer) donc je suppose que vous n'avez pas de chance de toute façon. Voir aussi http://en.wikipedia.org/wiki/, ou (http://en.wikipedia.org/wiki/)) et d'autres URL similaires similaires.

Questions connexes