2014-02-28 28 views
0

我有以下鏈接:如何在python中切斷鏈接?

http://ecx.images-amazon.com/images/I/51JXXb2vpDL._SY344_PJlook-inside-v2,TopRight,1,0_SH20_BO1,204,203,200_.jpg 

如何取適量的鏈接這一部分:

http://ecx.images-amazon.com/images/I/51JXXb2vpDL.jpg 

,並刪除一切?我也想保留擴展名。

我想刪除這部分:

._SY344_PJlook-inside-v2,TopRight,1,0_SH20_BO1,204,203,200_ 

,並保持這一部分:

http://ecx.images-amazon.com/images/I/51JXXb2vpDL.jpg 

我怎樣才能做到這一點在Python?

+0

又有什麼模式,你正在尋找在這裏?任何超過擴展名的首字母和數字的內容?或者你需要尋找'._SY'開始?一個例子不是模式。 –

+0

應該支持哪些擴展?只是'.jpg'或者'.png'和'.gif'選項等等,您需要在這裏告訴我們更多關於輸入的信息。 –

+0

就在那裏它可以是JPG,PNG,GIF。在99%是JPG格式,但我不能確定將JPG格式設置爲100% – Krasimir

回答

0
url = re.sub("(/[^./]+)\.[^/]*?(\.[^.]+)$", "\\1\\2", url) 
1

你可以使用:

re.sub(r'\._[\w.,-]*(\.(?:jpg|png|gif))$', r'\1', inputurl) 

這使得一些假設,但它只是對你的輸入。搜索從._序列開始,在字母,數字,短劃線,下劃線,點或逗號之後取任何值,然後匹配擴展名。我選擇了一小組可能的擴展;您也可以在末尾使用(\.w+)$,而不是擴展單詞字符的可接受擴展名。

演示:

>>> import re 
>>> inputurl = 'http://ecx.images-amazon.com/images/I/51JXXb2vpDL._SY344_PJlook-inside-v2,TopRight,1,0_SH20_BO1,204,203,200_.jpg' 
>>> re.sub(r'\._[\w.,-]*(\.(?:jpg|png|gif))$', r'\1', inputurl) 
'http://ecx.images-amazon.com/images/I51JXXb2vpDL.jpg' 
+0

問題是,在此鏈接中包含'._',然後剪切了我需要的部分。 – Krasimir

+0

@Krasimir:爲您添加了'\ ._'測試。 –

1

下面應該工作:

import re 

url = "http://ecx.images-amazon.com/images/I/51JXXb2vpDL._SY344_PJlook-inside-v2,TopRight,1,0_SH20_BO1,204,203,200_.jpg" 

print re.sub(r"(https?://.+?)\._.+(\.\w+)", r'\1\2', url) 

上面的代碼打印

http://ecx.images-amazon.com/images/I/51JXXb2vpDL.jpg 

一個重要的細節:更多環節都必須找到正確的模式。目前我假設你想要的一切,直到第一._

+0

問題是,在這個鏈接中包含'._',然後我剪掉了我需要的部分。 – Krasimir

+0

@Krasimir你能解釋一下自己嗎?我不明白你的意思。 –

+0

如果這裏:'51JXXb2vpDL'存在'._''51JXX._b2vpDL'那麼正則表達式不起作用。 – Krasimir

1
url = "http://ecx.images-amazon.com/images/I/51JXXb2vpDL._SY344_PJlook-inside-v2,TopRight,1,0_SH20_BO1,204,203,200_.jpg" 
l = url.split(".") 
print(".".join(l[:-2:])+".{}".format(l[-1])) 

打印

http://ecx.images-amazon.com/images/I/51JXXb2vpDL.jpg