2009-07-10 13 views
3

テキストをリンクに変換するにはどうすればよいですか?戻るPHPで、私は私の目的のためによく働いたコードのこの部分を使用:誰かがこれを変換することができればURLをPythonのregexを使用してリンクに置き換えます。

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

私はPythonで周りを試みたが、それは仕事を得ることができなかった...非常にいいだろうPython :) ..

+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://を使用しました:/ 私は自分自身の前でそれを試したように見えるが、私は "re.IGNORECASE | re.DOTALL"について知りませんでしたし、私のPHP式にあったハッシュ記号を削除しませんでした 私はいくつかの正規表現本やマニュアルは、しかし、すべての年で、私はこの単純なことを行うために正規表現が必要なので、私のモチベーションは本当に低いです。それは申し訳ありません、あなたが私を殺すつもりはないことを願って...) – user122750

+0

また、私はこの方法ではフィルターを使用していないと言いましたが、ユーザーのリンクからドメインの名前だけが表示され、フルURLではなく、指定された文字数に縮小されたURLが表示されます。 – user122750

関連する問題