我有这个网址:
http://www.exmaple.com/boo/a.php?a=jsd
我想要的输出是这样的:
http://www.exmaple.com/boo/
如果我有,那就明智了
http://www.exmaple.com/abc.html
应该是
http://www.exmaple.com/
和
http://www.exmaple.com/
应该返回
http://www.exmaple.com/
没有任何改变
这就是我试过的
re.sub(r'\?[\S]+','',"http://www.exmaple.com/boo/a.php?a=jsd")
但会返回
http://www.exmaple.com/boo/a.php
有什么建议可以做些什么来获得正确的输出,或者有没有人有更好的想法来完成这项工作?
答案 0 :(得分:5)
请使用stdlib urlparse
模块,如下所示。一般来说,除非绝对必要,否则我会尽量避免使用正则表达式。
from urlparse import urlparse, urlunparse
>>> parsed = urlparse("http://www.exmaple.com/boo/a.php?a=jsd")
>>> scheme, netloc, path, params, query, fragment = parsed
>>> urlunparse((scheme,netloc,path.split('/')[1],'','',''))
'http://www.exmaple.com/boo'
答案 1 :(得分:1)
我会做那样的事情:
>>> import re
>>> url = "http://www.exmaple.com/boo/a.php?a=jsd"
>>> url[:url.rfind("/")+1]
'http://www.exmaple.com/boo/'
删除最后一个“/”之后的所有内容。我不确定它是否涵盖了所有特殊情况......
编辑:使用urlparse
和我的简单rfind
的新解决方案:
import re, urlparse
def url_cutter(url):
up = urlparse.urlparse(url)
url2 = up[0]+"://"+up[1]+up[2]
if url.rfind("/")>6:
url2 = url2[:url2.rfind("/")+1]
return url2
然后:
In [36]: url_cutter("http://www.exmaple.com/boo/a.php?a=jsd")
Out[36]: 'http://www.exmaple.com/boo/'
In [37]: url_cutter("http://www.exmaple.com/boo/a.php?a=jsd#dvt_on")
Out[37]: 'http://www.exmaple.com/boo/'
In [38]: url_cutter("http://www.exmaple.com")
Out[38]: 'http://www.exmaple.com'
答案 2 :(得分:0)
可能有一种更优化的方法可以做到这一点但是使用这个方法你不需要一个模糊的导入或第三方包。
url = "http://www.google.com/abc/abc.html?q=test"
cleaned_url = url[:url.rindex("?")]
cleaned_url = cleaned_url.split("/")
cleaned_url = [item for item in cleaned_url if ".html" not in item]
cleaned_url = "/".join(cleaned_url)