2009-07-10 6 views
3

comment puis-je convertir du texte en un lien? Retour en PHP, j'ai utilisé ce morceau de code qui a bien fonctionné pour mon but:Remplacer URL avec un lien en utilisant regex en python

  $text = preg_replace("#(^|[\n ])(([\w]+?://[\w\#$%&~.\-;:=,[email protected]\[\]+]*)(/[\w\#$%&~/.\-;:=,[email protected]\[\]+]*)?)#is", "\\1<a href=\"\\2\" target=\"_blank\">\\3</a>", $text); 
      $text = preg_replace("#(^|[\n ])(((www|ftp)\.[\w\#$%&~.\-;:=,[email protected]\[\]+]*)(/[\w\#$%&~/.\-;:=,[email protected]\[\]+]*)?)#is", "\\1<a href=\"http://\\2\" target=\"_blank\">\\3</a>", $text); 

J'ai essayé autour en Python, mais a été incapable de le faire travailler .. Ce serait très bien si quelqu'un pouvait traduire cela Python :) ..

+2

Ce qui n'a pas? Quel genre de résultats avez-vous obtenu? Vous devriez nous donner un indice sur ce que vous avez essayé. Vous obtiendrez probablement de meilleurs résultats en nous donnant un point de départ, d'autant plus que cela montre que vous êtes prêt à mettre du travail dans le problème. –

+2

si vous le faites dans Django, il y a le filtre 'urlize': http://docs.djangoproject.com/fr/dev/ref/templates/builtins/#urlize – Javier

+0

En se basant sur le commentaire de Javier, la source d'urlize semble soyez ce que vous voulez: http://code.djangoproject.com/browser/django/trunk/django/utils/html.py#L77 – hao

Répondre

5

Le code ci-dessous est une simple traduction en python. Vous devriez confirmer qu'il fait réellement ce que vous voulez. Pour plus d'informations, veuillez consulter le Python Regular Expression HOWTO.

import re 

pat1 = re.compile(r"(^|[\n ])(([\w]+?://[\w\#$%&~.\-;:=,[email protected]\[\]+]*)(/[\w\#$%&~/.\-;:=,[email protected]\[\]+]*)?)", re.IGNORECASE | re.DOTALL) 

pat2 = re.compile(r"#(^|[\n ])(((www|ftp)\.[\w\#$%&~.\-;:=,[email protected]\[\]+]*)(/[\w\#$%&~/.\-;:=,[email protected]\[\]+]*)?)", re.IGNORECASE | re.DOTALL) 


urlstr = 'http://www.example.com/foo/bar.html' 

urlstr = pat1.sub(r'\1<a href="\2" target="_blank">\3</a>', urlstr) 
urlstr = pat2.sub(r'\1<a href="http:/\2" target="_blank">\3</a>', urlstr) 

print urlstr 

Voici ce que la sortie ressemble à ma fin:

<a href="http://www.example.com/foo/bar.html" target="_blank">http://www.example.com</a> 
+1

Ça y est, ça marche. J'ai seulement dû enlever ce hash-signe pat2 = re.compile (r "# << --- et dans urlstr = pat2.sub(), j'ai utilisé http: // - pas seulement http:/ It On dirait que je l'ai essayé avant moi-même, mais je ne savais pas à propos de "re.IGNORECASE | re.DOTALL" et je n'ai pas supprimé les hash-signs qui étaient dans mon expression PHP Je sais que je devrais jeter un coup d'oeil à certains regex livre ou manuel, mais dans toutes les années, je n'avais besoin que de regex pour faire ce truc 'simple', donc ma motivation est vraiment faible, désolé pour ça, j'espère que vous n'allez pas me tuer:) ... – user122750

+0

J'ai oublié de mentionner que je le fais de cette façon et que je n'utilise pas le filtre, car cela montre seulement le nom du domaine du lien vers l'utilisateur, pas l'URL complète et pas une URL réduite à un nombre donné de caractères. – user122750

Questions connexes