2011-05-04 123 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'