wake-up-neo.com

So entfernen Sie eine beliebige URL innerhalb einer Zeichenfolge in Python

Ich möchte alle URLs innerhalb eines Strings entfernen (durch "" ersetzen) Ich habe gesucht, konnte aber nicht wirklich finden, was ich will.

Beispiel:

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

Ich möchte das Ergebnis sein:

text1
text2
text3
text4
text5
text6
21
Ultimate Zero

Python-Skript:

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

Ausgabe:

text1
text2
text3
text4
text5
text6

Diesen Code testen hier .

47
Ωmega

der kürzeste Weg 

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

Das hat für mich funktioniert:

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

Ergebnis:

text1
text2

text3
text4

text5
text6
15
Ultimate Zero

Es sollte einfach sein mit regulären Ausdrücken . Sie können sie über das Modul re in Python verwenden.

Für welchen regulären Ausdruck eine gültige URL am besten erkannt werden kann, überprüfen Sie diese SO - Fragen:

Es gibt einige hoch gewählte Antworten in diesen, so dass es Ihnen eine Richtung geben sollte.

7
Abhranil Das

Diese Lösung berücksichtigt http, https und andere normale URL-Sonderzeichen:

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"))
6
Lee Martin

Entfernen von HTTP-Links/URLs, die in einem beliebigen Text enthalten sind:

import re
re.sub(r'''(?i)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))''', " ", text)
5
Pranzell

Man könnte es auch von der anderen Seite betrachten ...

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]
4
Jon Clements

Ich konnte keine finden, die sich mit meiner speziellen Situation befasste, indem url in der Mitte von Tweets entfernt wurde, die auch Leerzeichen in der Mitte von urls hatten. 

(https?:\/\/)(\s)*(www\.)?(\s)*((\w|\s)+\.)*([\w\-\s]+\/)*([\w\-]+)((\?)?[\w\s]*=\s*[\w\%&]*)*

hier ist eine Erklärung:
(https?:\/\/) stimmt mit http: // oder https: // überein
(\s)* optionale Whitespaces
(www\.)? passt optional zu www.
(\s)* passt optional zu Whitespaces
((\w|\s)+\.)* entspricht 0 oder mehr von einem oder mehreren Word-Zeichen, gefolgt von einem Punkt
([\w\-\s]+\/)* entspricht 0 oder mehr von einem oder mehreren Wörtern (oder einem Bindestrich oder einem Leerzeichen) gefolgt von '\'
([\w\-]+) ein beliebiger Pfad am Ende der URL gefolgt von einer optionalen Endung
((\?)?[\w\s]*=\s*[\w\%&]*)* stimmt mit abschließenden Abfrageparametern überein (auch mit Leerzeichen usw.) 

testen Sie dies hier: https://regex101.com/r/NmVGOo/8

Der folgende reguläre Ausdruck in Python eignet sich gut fürErkennen von URL (s)im Text:

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)

Ausgabe :

text1
text2

text3
text4

text5
text6
2
Shailesh Wadhwa

Ich weiß, dass dies bereits beantwortet wurde und es ist dumm spät, aber ich denke, das sollte hier sein. Dies ist eine Regex, die mit jeder Art von URL übereinstimmt. 

[^ ]+\.[^ ]+

Es kann gerne verwendet werden 

re.sub('[^ ]+\.[^ ]+','',sentence)
1
Nischit Pradhan

Zunächst sollte ein Muster für URLs in Ihrer Textdatei gefunden werden. Wenn Sie es gefunden haben, können Sie reguläre Ausdrücke verwenden.
Es ist für Sie möglich, die gleiche Arbeit zu erledigen, aber reg expr macht Ihre Arbeit sehr viel einfacher und lohnenswert.

1
Rsh

Sie möchten wirklich alle Zeichenfolgen entfernen, die entweder mit http:// oder https:// plus einer beliebigen Kombination von Leerzeichen beginnen. So würde ich es lösen. Meine Lösung ist der von @tolgayilmaz sehr ähnlich

#Define the text from which you want to replace the url with "".
text ='''The link to this post is https://stackoverflow.com/questions/11331982/how-to-remove-any-url-within-a-string-in-python'''

import re
re.sub('http://\S+|https://\S+', '', text)

Und das Ergebnis der Ausführung des obigen Codes ist 

>>> 'The link to this post is '
0
Nde Samuel Mbah