2011-05-04 163 views
6

我有有一個像URL值的列表:搜索和替換操作

http://farm6.static.flickr.com/5149/5684108566_aed8b9b52d_s.jpg 

如何我到底改變_s_m對所有出現?

回答

8

試試這個:

str = "http://farm6.static.flickr.com/5149/5684108566_aed8b9b52d_s.jpg" 
str = str.replace("_s","_m") 

如果你想確保只有拉斯部分被改變,你知道所有的.jpg文件,您可以使用:

str = "http://farm6.static.flickr.com/5149/5684108566_aed8b9b52d_s.jpg" 
str = str.replace("_s.jpg","_m.jpg") 

給一些更多的上下文並避免網址中間的更改。

+1

1爲更多的上下文檢查。 '.rreplace'方法在這裏很有用。 – eumiro 2011-05-04 10:58:16

4

或者如果你想能夠做到這一點任何文件擴展名並確保字符串中除了最後一部分沒有任何變化。

import re 

str = "http://farm6.static.flickr.com/5149/5684108566_aed8b9b52d_s.jpg" 
re.sub("(.*)_s(\.[a-z0-9]{1,4})$", r"\1_m\2", str) 
str = "http://farm6.static.flickr.com/5149/5684108566_aed8b9b52d_s.png" 
re.sub("(.*)_s(\.[a-z0-9]{1,4})$", r"\1_m\2", str) 
str = "http://farm6.static.flickr.com/5149/5684108566_aed8b9b52d_s.gif" 
re.sub("(.*)_s(\.[a-z0-9]{1,4})$", r"\1_m\2", str) 
str = "http://farm6.static.flickr.com/5149/5684108566_aed8b9b52d_s.zip" 
re.sub("(.*)_s(\.[a-z0-9]{1,4})$", r"\1_m\2", str) 

輸出:

>>> str = "http://farm6.static.flickr.com/5149/5684108566_aed8b9b52d_s.jpg" 
>>> re.sub("(.*)_s(\.[a-z0-9]{1,4})$", r"\1_m\2", str) 
'http://farm6.static.flickr.com/5149/5684108566_aed8b9b52d_m.jpg' 

>>> str = "http://farm6.static.flickr.com/5149/5684108566_aed8b9b52d_s.png" 
>>> re.sub("(.*)_s(\.[a-z0-9]{1,4})$", r"\1_m\2", str) 
'http://farm6.static.flickr.com/5149/5684108566_aed8b9b52d_m.png' 

>>> str = "http://farm6.static.flickr.com/5149/5684108566_aed8b9b52d_s.gif" 
>>> re.sub("(.*)_s(\.[a-z0-9]{1,4})$", r"\1_m\2", str) 
'http://farm6.static.flickr.com/5149/5684108566_aed8b9b52d_m.gif' 

>>> str = "http://farm6.static.flickr.com/5149/5684108566_aed8b9b52d_s.zip" 
>>> re.sub("(.*)_s(\.[a-z0-9]{1,4})$", r"\1_m\2", str) 
'http://farm6.static.flickr.com/5149/5684108566_aed8b9b52d_m.zip'