2009-04-06 40 views
12

Làm cách nào để phân tích cú pháp văn bản và tìm tất cả các trường hợp siêu liên kết bằng một chuỗi? Siêu liên kết sẽ không ở định dạng html là <a href="http://test.com">test</a> nhưng chỉ http://test.comTìm Siêu liên kết trong Văn bản bằng Python (liên quan đến twitter)

Thứ hai, tôi muốn chuyển đổi chuỗi gốc và thay thế tất cả các trường hợp siêu liên kết thành siêu liên kết html có thể nhấp.

tôi tìm thấy một ví dụ trong chủ đề này:

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

nhưng không thể tái tạo nó trong python :(

+3

Bạn nên sử dụng http://example.com cho URL mẫu. Xem http://en.wikipedia.org/wiki/Example.com –

+0

Cảm ơn John! Tôi không biết rằng đó là những miền ví dụ chính thức. –

+0

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

Trả lời

20

Dưới đây là một cổng Python của 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

Cảm ơn chỉ mẹo để tôi bắt đầu! Hãy để tôi thử và hiểu nó ... – TimLeung

+0

Bạn được chào đón. – maxyfc

+3

Nó có thể được cải thiện bằng cách thêm hỗ trợ cho URL https hoặc ftp ... Ngoài ra, tôi tin rằng lược đồ (http) là trường hợp-INsensitive. – bortzmeyer

8

Here là một regexp phức tạp hơn nhiều từ năm 2002.

+2

Nó hữu ích hơn tôi nhiều so với câu trả lời được chấp nhận. –

+0

Tôi thấy nó rất hữu ích và khai thác nó thành: 're.compile (r '\ b (?: Https? | Telnet | gopher | tệp | wais | ftp): [\ w/# ~:.? + = &% @! \ -.:? \\ -] +? (? = [.:? \ -] * (?: [^ \ w/# ~:.? + = &% @! \ - .: ? \ -] | $)) ') ' – yoniLavi

+1

Công cụ tuyệt vời, nhưng điều gì sẽ xảy ra nếu URL không có tiền tố http: //. Thông thường, chúng tôi không chỉ định phần đó nữa trong email và phương tiện truyền thông xã hội. – dlink

5

Django cũng có một giải pháp không chỉ sử dụng regex. Đó là django.utils.html.urlize(). Tôi thấy điều này rất hữu ích, đặc biệt nếu bạn tình cờ sử dụng django.

Bạn cũng có thể trích xuất code để sử dụng trong dự án của riêng bạn.

1

Jinja2 (Bình sử dụng điều này) có bộ lọc urlize cũng giống như vậy.

Docs

Các vấn đề liên quan