2015-07-02 108 views
1

我有一個這樣的字符串,並想提取與645w決議的鏈接。如何在字符串中反向搜索以獲取索引?

"//i.guim.co.uk/img/media/d126680aca92ff4251536f788b60233b5463af89/1585_707_3685_2210/3685.jpg?w=620&q=85&auto=format&sharp=10&s=ed7be5af3592322971e9e2276b5338f8 620w, 

//i.guim.co.uk/img/media/d126680aca92ff4251536f788b60233b5463af89/1585_707_3685_2210/3685.jpg?w=700&q=85&auto=format&sharp=10&s=d49ff60c0c561cb2eee8d119acba62c5 700w, 

//i.guim.co.uk/img/media/d126680aca92ff4251536f788b60233b5463af89/1585_707_3685_2210/3685.jpg?w=645&q=85&auto=format&sharp=10&s=19e251fb9bd21787e8364c091e4a89ce 645w, 

//i.guim.co.uk/img/media/d126680aca92ff4251536f788b60233b5463af89/1585_707_3685_2210/3685.jpg?w=465&q=85&auto=format&sharp=10&s=fd5d66ed602638295446f28c4853744d 465w" 

的位置並不總是一樣的,所以我想用這樣的事情的:

if ' 645w' in src: 
    index = src.find(" 645w") 
    end_of_url = src[:index] 

我怎麼能現在倒退搜索,直到我打的URL的開頭,並獲得開始 - 索引//

預期成果是:

//i.guim.co.uk/img/media/d126680aca92ff4251536f788b60233b5463af89/1585_707_3685_2210/3685.jpg?w=645&q=85&auto=format&sharp=10&s=19e251fb9bd21787e8364c091e4a89ce 
+3

有一個'RFIND()''中str'實例。它對你有幫助嗎? – Alfe

+0

它可以轉換成列表 – The6thSense

+0

您的預期輸出是什麼? –

回答

0

您可以使用string.rfind()函數,它以相反的順序搜索字符串。

示例 -

>>> if ' 645w' in src: 
...  index = src.find(' 645w') 
...  end_of_url = src[:index] 
...  print(end_of_url[end_of_url.rfind('//'):]) 
... 
//i.guim.co.uk/img/media/d126680aca92ff4251536f788b60233b5463af89/1585_707_3685_2210/3685.jpg?w=645&q=85&auto=format&sharp=10&s=19e251fb9bd21787e8364c091e4a89ce 
+0

雖然有很多其他建議的解決方案正在工作,但這裏的這個解決方案最接近我所問的問題。因此,我會接受他的。 – Houman

0

你可以把一個strx[::-1]。如果您在翻轉的字符串中搜索翻轉的模式,您可以按照需要的順序找到事件。只記得在使用它們之前轉換索引值。

0

您可以通過拆分 '' 並在每個搜索字符串645瓦特

例子:

>>> links = "a 620w, b 700w, c 645w, d 456w"; 
    >>> linksArray = links.split(","); 
    >>> for link in linksArray: 
    ...  index = link.find("645w"); 
    ...  if index > -1: 
    ...   print(link[:index]); 
    // out : " c " 

你需要適應多一點點,但我更喜歡保持事情比反向搜索和切友好。

+0

我喜歡你的解決方案,有點採用它,但你似乎是一個Javascript開發人員吧?在末尾使用分號並使用錯誤的外殼;) – Houman

+0

謝謝,我是C/C++開發人員,然後分號和駱駝對我很重要。 :P – eroween

0

這會給你一個包含URL列表645w

[url[:url.find(' 645w')] for url in src.split(', ') if ' 645w' in url] 

在這種情況下,計算結果爲:

['//i.guim.co.uk/img/media/d126680aca92ff4251536f788b60233b5463af89/1585_707_3685_2210/3685.jpg?w=645&q=85&auto=format&sharp=10&s=19e251fb9bd21787e8364c091e4a89ce'] 
+0

有趣的解決方案。雖然'645w'應該在最後切斷,因爲它不是鏈接的一部分。但我明白你的觀點。 – Houman

0
s = "//i.guim.co.uk/img/media/d126680aca92ff4251536f788b60233b5463af89/1585_707_3685_2210/3685.jpg?w=620&q=85&auto=format&sharp=10&s=ed7be5af3592322971e9e2276b5338f8 620w, //i.guim.co.uk/img/media/d126680aca92ff4251536f788b60233b5463af89/1585_707_3685_2210/3685.jpg?w=700&q=85&auto=format&sharp=10&s=d49ff60c0c561cb2eee8d119acba62c5 700w, //i.guim.co.uk/img/media/d126680aca92ff4251536f788b60233b5463af89/1585_707_3685_2210/3685.jpg?w=645&q=85&auto=format&sharp=10&s=19e251fb9bd21787e8364c091e4a89ce 645w, //i.guim.co.uk/img/media/d126680aca92ff4251536f788b60233b5463af89/1585_707_3685_2210/3685.jpg?w=465&q=85&auto=format&sharp=10&s=fd5d66ed602638295446f28c4853744d 465w" 


print([url.strip(" 645w") for url in s.split(",") if url.endswith("645w")]) 
['//i.guim.co.uk/img/media/d126680aca92ff4251536f788b60233b5463af89/1585_707_3685_2210/3685.jpg?w=645&q=85&auto=format&sharp=10&s=19e251fb9bd21787e8364c091e4a89ce']