2012-07-04 52 views
13

Tôi muốn xóa tất cả URL bên trong một chuỗi (thay thế chúng bằng "") Tôi đã tìm kiếm xung quanh nhưng không thể tìm thấy thứ mình muốn.Cách xóa bất kỳ URL nào trong chuỗi bằng Python

Ví dụ:

text1 
text2 
http://url.com/bla1/blah1/ 
text3 
text4 
http://url.com/bla2/blah2/ 
text5 
text6 
http://url.com/bla3/blah3/ 

Tôi muốn kết quả là:

text1 
text2 
text3 
text4 
text5 
text6 
+7

Bạn có chắc chắn bạn đã nghiên cứu đầy đủ chưa? Bạn đã thử ** biểu thức chính quy ** chưa? –

+1

Có nhưng tôi không thực sự hiểu cách thực hiện trong ví dụ của tôi .. –

+3

Bạn đã xem http://stackoverflow.com/questions/520031/whats-the-cleanest-way-to-extract-urls-from -a-string-using-python –

Trả lời

33

Python script:

import re 
text = re.sub(r'^https?:\/\/.*[\r\n]*', '', text, flags=re.MULTILINE) 

Output:

text1 
text2 
text3 
text4 
text5 
text6 

Kiểm tra mã này here.

+4

Cảm ơn bạn đã chỉ ** ** câu trả lời hữu ích và đơn giản. –

7

Nó phải là đơn giản sử dụng regular expressions. Bạn có thể sử dụng chúng thông qua mô-đun re trong python.

Đối mà biểu hiện thường xuyên nhất có thể phát hiện một url hợp lệ, kiểm tra các câu hỏi SO:

Có khá nhiều câu trả lời được bình chọn rất cao trong các câu trả lời này, do đó sẽ cung cấp cho bạn một số hướng.

+0

Tôi cũng đã kiểm tra cái đó trước đây .. Nhưng bạn có thể cho tôi biết cách làm điều đó cho ví dụ trên không? –

+3

Mục đích của Stack Overflow không chỉ là yêu cầu mã. Nếu bạn đã kiểm tra câu hỏi đó trước đây, tôi tự hỏi tại sao bạn chưa tìm thấy bất cứ điều gì. Bạn đã thử điều gì đã thất bại? –

1

Trước hết, bạn nên tìm mẫu trong tệp văn bản cho URL. khi bạn tìm thấy nó, bạn có thể sử dụng regular expressions.
Bạn có thể làm cùng một công việc, nhưng reg expr giúp công việc của bạn dễ dàng hơn và cũng xứng đáng để tìm hiểu.

13

này đã làm việc cho tôi:

import re 
thestring = "text1\ntext2\nhttp://url.com/bla1/blah1/\ntext3\ntext4\nhttp://url.com/bla2/blah2/\ntext5\ntext6" 

URLless_string = re.sub(r'\w+:\/{2}[\d\w-]+(\.[\d\w-]+)*(?:(?:\/[^\s/]*))*', '', thestring) 
print URLless_string 

Kết quả:

text1 
text2 

text3 
text4 

text5 
text6 
3

Bạn cũng có thể xem xét nó theo cách khác xung quanh ...

from urlparse import urlparse 
[el for el in ['text1', 'FTP://somewhere.com', 'text2', 'http://blah.com:8080/foo/bar#header'] if not urlparse(el).scheme] 
6

Giải pháp này phục vụ cho http, https và bình thường loại url ký tự đặc biệt khác:

import re 
def remove_urls (vTEXT): 
    vTEXT = re.sub(r'(https|http)?:\/\/(\w|\.|\/|\?|\=|\&|\%)*\b', '', vTEXT, flags=re.MULTILINE) 
    return(vTEXT) 


print(remove_urls("this is a test https://sdfs.sdfsdf.com/sdfsdf/sdfsdf/sd/sdfsdfs?bob=%20tree&jef=man lets see this too https://sdfsdf.fdf.com/sdf/f end")) 
+0

Điều này làm việc cho tôi. Cảm ơn bạn. – Aventinus

-3

Regular Expression để URL loại bỏ trong PHP

<?php 

    preg_match_all('/<a.*?href=".*?">(.*?)<[\/]a>/', $content,$arr); 

    $new_content = str_replace($arr[0], $arr[1], $content); 
    echo $new_content; 
?> 

URL remove Example

10

sự cách ngắn nhất

re.sub(r'http\S+', '', stringliteral) 
1

Các biểu hiện thường xuyên sau trong Python hoạt động tốt cho phát hiện URL (s) trong văn bản:

source_text = ''' 
text1 
text2 
http://url.com/bla1/blah1/ 
text3 
text4 
http://url.com/bla2/blah2/ 
text5 
text6 ''' 

import re 
url_reg = r'[a-z]*[:.]+\S+' 
result = re.sub(url_reg, '', source_text) 
print(result) 

Output:

text1 
text2 

text3 
text4 

text5 
text6 
+1

Câu hỏi đã được trả lời 5 năm trước. Câu trả lời của bạn mang lại những giá trị mới nào? –

+0

Thao tác này sẽ xóa các dòng như 'text1: text2', điều này không được mong muốn. – Toto

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