2012-07-04 11 views
13

Chcę usunąć wszystkie adresy URL w ciągu znaków (zastąp je "") Szukałem, ale nie mogłem znaleźć tego, czego chcę.Jak usunąć dowolny adres URL w ciągu znaków w języku Python

Przykład:

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

Chcę być wynikiem:

text1 
text2 
text3 
text4 
text5 
text6 
+7

Czy na pewno zbadałeś wystarczająco? Czy próbowałeś ** wyrażeń regularnych **? –

+1

Tak, ale tak naprawdę nie rozumiem, jak to zrobić w moim przykładzie. –

+3

Czy obejrzałeś http://stackoverflow.com/questions/520031/whats-cleanest-way-to-extract-urls-from -a-string-using-python –

Odpowiedz

33

Python skrypt:

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

wyjściowa:

text1 
text2 
text3 
text4 
text5 
text6 

przetestować ten kod here.

+4

Dzięki za ** tylko ** pomocna i prosta odpowiedź. –

7

To powinno być proste używając regular expressions. Możesz ich używać za pomocą modułu re w pythonie.

Dla których wyrażenie regularne można najlepiej wykryć prawidłowy adres URL, należy sprawdzić te tak pytania:

Istnieje wiele bardzo głosowanych odpowiedzi, które powinny dać ci pewien kierunek.

+0

Sprawdziłem to wcześniej. Ale czy możesz mi powiedzieć, jak to zrobić w powyższym przykładzie? –

+3

Celem Stack Overflow jest nie tylko żądanie kodu. Jeśli wcześniej sprawdziłeś to pytanie, zastanawiam się, dlaczego jeszcze nic nie znalazłeś. Czego próbujesz, to się nie udało? –

1

Przede wszystkim powinien znaleźć wzór w tekście pliku tekstowego dla adresów URL. kiedy go znalazłeś, możesz użyć regular expressions.
Jest możliwe, że wykonujesz tę samą pracę, ale reg expr sprawia, że ​​twoja praca jest dużo łatwiejsza i warta nauki.

13

Ten pracował dla mnie:

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 

Wynik:

text1 
text2 

text3 
text4 

text5 
text6 
3

Można również patrzeć na to z innej strony ...

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

Rozwiązanie przeznaczony dla http, https i innych znaków specjalnych typu normalnego URL:

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

To zadziałało dla mnie. Dziękuję Ci. – Aventinus

-3

wyrażenie regularne URL usunięte w 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

się najkrótsza droga

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

Poniższe wyrażenie regularne w Pythonie działa dobrze dla wykrywającego URL (s) w tekście:

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

Na pytanie odpowiedziało 5 lat temu. Jaką nową wartość przynosi Twoja odpowiedź? –

+0

Spowoduje to usunięcie linii takich jak 'text1: text2', które nie są poszukiwane. – Toto

Powiązane problemy