web-dev-qa-db-fra.com

Comment supprimer une URL dans une chaîne en Python

Je souhaite supprimer toutes les URL d'une chaîne (remplacez-les par "") J'ai fait une recherche, mais je n'ai pas trouvé ce que je voulais.

Exemple:

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

Je veux que le résultat soit:

text1
text2
text3
text4
text5
text6
21
Ultimate Zero

Script Python:

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

Output:

text1
text2
text3
text4
text5
text6

Testez ce code ici .

47
Ωmega

le plus court chemin 

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

Cela a fonctionné pour moi:

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

Résultat:

text1
text2

text3
text4

text5
text6
15
Ultimate Zero

Cela devrait être simple en utilisant expressions régulières . Vous pouvez les utiliser via le module re en python.

Pour quelle expression régulière peut le mieux détecter une URL valide, vérifiez les questions suivantes SO:

Il y a beaucoup de réponses hautement votées dans ces réponses, cela devrait donc vous donner une indication.

7
Abhranil Das

Cette solution prend en charge http, https et les autres caractères spéciaux de type url habituels:

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

Suppression des liens HTTP/URL mélangés dans n'importe quel texte:

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

Vous pouvez également regarder de l'autre côté ...

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

Je n'ai pas réussi à en trouver qui traitent ma situation particulière: supprimer les {urls au milieu} _ de tweets comportant également (espaces) au milieu des urls alors j'ai créé le mien: 

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

voici une explication:
(https?:\/\/) correspond à http: // ou https: //
(\s)* espaces blancs facultatifs
(www\.)? correspond facultativement à www.
(\s)* correspond éventuellement à des espaces
((\w|\s)+\.)* correspond à 0 ou plus d'un ou plusieurs caractères Word suivis d'un point
([\w\-\s]+\/)* correspond à 0 ou plus d'un ou plusieurs mots (ou un tiret ou un espace) suivi de '\'
([\w\-]+) tout chemin restant à la fin de l'URL suivi d'une fin facultative
((\?)?[\w\s]*=\s*[\w\%&]*)* correspond aux paramètres de la requête de fin (même avec des espaces, etc.) 

testez ceci ici: https://regex101.com/r/NmVGOo/8

4

L'expression régulière suivante dans Python fonctionne bien pourdétecter l'URL (s)dans le texte:

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)

Sortie :

text1
text2

text3
text4

text5
text6
2
Shailesh Wadhwa

Je sais que cela a déjà été répondu et que c'est stupide tard, mais je pense que cela devrait être ici. C'est un regex qui correspond à n'importe quel type d'URL. 

[^ ]+\.[^ ]+

Il peut être utilisé comme 

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

Tout d'abord, il convient de trouver un motif dans votre fichier texte pour les URL. quand vous avez trouvé le, vous pouvez utiliser expressions régulières .
Il est possible que vous fassiez le même travail, mais reg expr rend votre travail beaucoup plus facile et digne d’être appris.

1
Rsh

Ce que vous voulez vraiment faire est de supprimer toute chaîne commençant par http:// ou https://, ainsi que toute combinaison de caractères non blancs. Voici comment je le résoudrais. Ma solution est très similaire à celle de @tolgayilmaz

#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)

Et le résultat de l'exécution du code ci-dessus est 

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