64

我想删除一个字符串中的所有 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
4

14 回答 14

93

最短的路

re.sub(r'http\S+', '', stringliteral)
于 2016-11-26T21:01:04.817 回答
85

Python脚本:

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

输出:

text1
text2
text3
text4
text5
text6

在此处测试此代码。

于 2012-07-04T16:15:58.030 回答
26

这对我有用:

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
于 2012-07-04T16:12:43.740 回答
18

删除混合在任何文本中的 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)
于 2018-04-26T06:48:18.173 回答
16

此解决方案适用于 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"))
于 2016-07-21T08:05:35.233 回答
14

我找不到任何可以处理我的特殊情况的方法,即删除推文中间的网址,网址中间也有空格,所以我自己制作了:

(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

于 2018-08-16T20:20:26.730 回答
12

您真正想要做的是删除以任何一个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 '

我更喜欢第二个,因为它更具可读性。

于 2019-01-15T20:42:30.947 回答
7

我知道这已经得到了回答,而且迟到了,但我认为这应该在这里。这是一个匹配任何类型 url 的正则表达式。

[^ ]+\.[^ ]+

它可以像

re.sub('[^ ]+\.[^ ]+','',sentence)
于 2018-03-13T13:39:02.297 回答
7

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

import re

def remove_URL(text):
    """Remove URLs from a text string"""
    return re.sub(r"http\S+", "", text)
于 2020-08-28T11:55:25.333 回答
6

也可以换个角度看...

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]
于 2012-07-04T16:48:26.433 回答
3

Python中的以下正则表达式适用于检测文本中的 URL:

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
于 2017-09-02T14:19:28.523 回答
0

我认为最通用的 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)
于 2021-08-11T09:21:34.797 回答
0

一个带有正面外观的简单 .* 应该可以完成这项工作。

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)
于 2021-09-20T07:07:15.137 回答
-1
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    ​
于 2019-11-05T06:07:09.987 回答