2009-04-06 5 views
12

Jak mogę analizować tekst i znajdować wszystkie wystąpienia hiperłączy za pomocą ciągu? Hiperłącze nie będzie w formacie html z <a href="http://test.com">test</a>, ale po prostu http://test.com Po drugie, chciałbym następnie przekonwertować oryginalny ciąg i zastąpić wszystkie wystąpienia hiperłączy w klikalne hiperłącza html.Znajdź hiperłącza w tekście za pomocą Pythona (związane z twitterem)

Znalazłem przykład w tym wątku:

Easiest way to convert a URL to a hyperlink in a C# string?

ale nie był w stanie rozmnażać się w pytona :(

+3

Należy użyć http://example.com na przykład adresy URL. Zobacz http://en.wikipedia.org/wiki/Example.com –

+0

Dzięki John! Nie wiedziałem, że są to oficjalne przykładowe domeny. –

+0

Zobacz: https://stackoverflow.com/questions/9760588/how-do-you-extract-a-url-from-a-string-using-python/31952097#31952097 –

Odpowiedz

20

Oto portu Python od Easiest way to convert a URL to a hyperlink in a C# string?:

import re 

myString = "This is my tweet check it out http://tinyurl.com/blah" 

r = re.compile(r"(http://[^ ]+)") 
print r.sub(r'<a href="\1">\1</a>', myString) 

Output :

This is my tweet check it out <a href="http://tinyurl.com/blah">http://tinyurl.com/blah</a> 
+0

Po prostu napiwek, żeby zacząć! Pozwól, że spróbuję i zrozumiem to ... – TimLeung

+0

Nie ma za co. – maxyfc

+3

Można to poprawić, dodając obsługę adresów URL https lub ftp ... Ponadto uważam, że schemat (http) jest niewrażliwy na wielkość liter. – bortzmeyer

8

Here jest znacznie bardziej wyrafinowany regexp od 2002

+2

To było dla mnie o wiele bardziej przydatne niż przyjęta odpowiedź. –

+0

Znalazłem też bardzo przydatne i zminimalizowałem je do: 're.compile (r '\ b (?: Https? | Telnet | gopher | file | wais | ftp): [\ w/# ~:.? + = &% @! \ -.:? \\ -] +? (? = [.:? \ -] * (?: [^ \ w/# ~:.? + = &% @! \ - .: ? \ -] | $)) ') ' – yoniLavi

+1

Świetne rzeczy, ale co, jeśli adres URL nie ma prefiksu http: //. Zazwyczaj nie precyzujemy tej części w e-mailach i mediach społecznościowych. – dlink

5

Django posiada również rozwiązania, które nie tylko użyć wyrażenia regularnego. Jest to django.utils.html.urlize(). Zauważyłem, że jest to bardzo pomocne, szczególnie jeśli używasz django.

Możesz również wyodrębnić code, aby użyć go w swoim projekcie.

1

Jinja2 (Flask używa tego) ma filtr urlize, który robi to samo.

Docs