我想删除一个字符串中的所有 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
我想删除一个字符串中的所有 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
最短的路
re.sub(r'http\S+', '', stringliteral)
Python脚本:
import re
text = re.sub(r'^https?:\/\/.*[\r\n]*', '', text, flags=re.MULTILINE)
输出:
text1
text2
text3
text4
text5
text6
在此处测试此代码。
这对我有用:
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
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)
此解决方案适用于 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"))
我找不到任何可以处理我的特殊情况的方法,即删除推文中间的网址,网址中间也有空格,所以我自己制作了:
(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 '
我更喜欢第二个,因为它更具可读性。
我知道这已经得到了回答,而且迟到了,但我认为这应该在这里。这是一个匹配任何类型 url 的正则表达式。
[^ ]+\.[^ ]+
它可以像
re.sub('[^ ]+\.[^ ]+','',sentence)
为了在 Python 中删除字符串中的任何URL,您可以使用这个 RegEx 函数:
import re
def remove_URL(text):
"""Remove URLs from a text string"""
return re.sub(r"http\S+", "", text)
也可以换个角度看...
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]
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
我认为最通用的 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)
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