如何在 Python 中删除字符串中的任何 URL

我想删除字符串中的所有 URL (用“”替换它们) 我四处寻找,但是没有找到我真正想要的。

例如:

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

我希望结果是:

text1
text2
text3
text4
text5
text6
177440 次浏览

这对我很有效:

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

结果:

text1
text2


text3
text4


text5
text6

Python 脚本:

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

产出:

text1
text2
text3
text4
text5
text6

测试代码 给你

你也可以从另一个角度来看。

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]

此解决方案适用于 http、 https 和其他普通 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"))

最近的路

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

巨蟒中的以下正则表达式对文本中的 检测网址很有用:

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)

产出 :

text1
text2


text3
text4


text5
text6

我知道这个问题已经有答案了,而且现在已经很晚了,但是我认为这个问题应该在这里。这是匹配任何类型 URL 的正则表达式。

[^ ]+\.[^ ]+

它可以像

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

删除混杂在任何文本中的 HTTP 链接/URL:

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)

我无法找到任何处理我的特殊情况,这是删除 网址在中间的推文,也有 Url 中间的空白所以我自己的:

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

这里有一个解释:
(https?:\/\/)匹配 http://或 https://
(\s)*可选空格
(www\.)?可选地匹配 www。
(\s)*可选地匹配空白
((\w|\s)+\.)*匹配后跟句点的一个或多个单词字符中的0个或多个
([\w\-\s]+\/)*匹配后跟“”的一个或多个单词(或破折号或空格)中的0个或多个
([\w\-]+)在 url 末尾的任意剩余路径后跟一个可选的结束
((\?)?[\w\s]*=\s*[\w\%&]*)*匹配结束查询参数(甚至包括空格等)

在这里测试: https://regex101.com/r/NmVGOo/8

您真正想做的是删除以 http://https://开头的任何字符串以及任何非空白字符组合。我是这样解决的。我的解决方案与@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
#Either use:
re.sub('http://\S+|https://\S+', '', text)
#OR
re.sub('http[s]?://\S+', '', text)

运行上述任一代码的结果都是

>>> 'The link to this post is '

我更喜欢第二个,因为它更易读。

import re
s = '''
text1
text2
http://url.com/bla1/blah1/
text3
text4
http://url.com/bla2/blah2/
text5
text6
http://url.com/bla3/blah3/'''
g = re.findall(r'(text\d+)',s)
print ('list',g)
for i in g:
print (i)

出去

list ['text1', 'text2', 'text3', 'text4', 'text5', 'text6']
text1
text2
text3
text4
text5
text6    ​

为了在 Python 中的字符串中使用 删除任何网址,可以使用这个 RegEx 函数:

import re


def remove_URL(text):
"""Remove URLs from a text string"""
return re.sub(r"http\S+", "", text)

我认为最常见的 URL 正则表达式模式如下:

URL_PATTERN = r'[A-Za-z0-9]+://[A-Za-z0-9%-_]+(/[A-Za-z0-9%-_])*(#|\\?)[A-Za-z0-9%-_&=]*'

有一个小模块可以完成您想要的任务:

pip install mysmallutils
from mysutils.text import remove_urls


remove_urls(text)

一个简单的。 * 和一个积极的看后面应该做的工作。

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


req=re.sub(r'http.*?(?=\s)', " ", text)
print(req)

为什么不用这个它这么完整

i = re.sub(r"(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)","",i)