2009-07-10 3 views
3

어떻게 텍스트를 링크로 변환합니까? 돌아 가기 PHP에서, 나는 나의 목적을 위해 잘 작동이 코드 조각 사용 : 나는 파이썬 주위 시도python에서 regex를 사용하여 URL을 링크로 바꾸기

  $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); 

을하지만 작동시킬 수 없습니다 .. 사람이 번역 할 수 있다면 매우 좋겠지 파이썬 :) ..

+2

무엇을 작동하지 않았다? 어떤 결과를 얻었습니까? 우리가 시도한 것에 대한 힌트를 주어야합니다. 특히 우리가 문제에 의지 할 의향이 있음을 보여주기 때문에, 더 좋은 결과를 얻을 수 있습니다. –

+2

Django에서 작업하는 경우 'urlize'필터가 있습니다. http://docs.djangoproject.com/en/dev/ref/templates/builtins/#urlize – Javier

+0

Javier의 의견을 바탕으로 urlize 소스가 원하는 것 : http://code.djangoproject.com/browser/django/trunk/django/utils/html.py#L77 – hao

답변

5

아래의 코드는 python으로의 간단한 번역입니다. 실제로 원하는대로 작동하는지 확인해야합니다. 자세한 내용은 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 

여기에 출력이 내 말에 어떻게 표시되는지를 보여줍니다 :

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

그게 다예요. 난 그 해쉬 기호를 제거해야만했다. pat2 = re.compile (r "# << --- ) 그리고 urlstr = pat2.sub()에서 나는 http : //를 사용했다. - http : //뿐만 아니라/ It 내가 직접 시도한 것처럼 보이지만 "re.IGNORECASE | re.DOTALL"에 대해 몰랐고 PHP 표현식에있는 해쉬 기호를 제거하지 않았습니다. 일부 정규식을 살펴야합니다. 책이나 매뉴얼,하지만 모든 년 동안, 난 단지이 일을 '정규식을 필요로하므로 내 동기 부여가 정말 낮습니다. 미안 해요, 당신이 날 죽일거야 희망 :) ... – user122750

+0

또한, 나는 언급하지 않았다. 필터를 사용하지 않고이 방법을 사용하는 것을 잊어 버렸다. 왜냐하면 이것은 사용자에게 연결되는 링크의 도메인 이름 만 표시하기 때문에 전체 URL이 아니라 주어진 수의 문자로 잘라낸 URL이 아니기 때문이다. – user122750