2014-11-22 57 views
0

创造我所拥有的文件,文件名如:删除日期时间由strftime

"001_-_h_-_hydrogen.2014-09-13.14-27-45.jpg" 

我想从文件名中删除与strftime创建的日期时间,并得到:

"001_-_h_-_hydrogen.jpg" 

功能看起来像:

def remove_datetime(str): 

    return str_withoutdatetime 

我真的很新的正则表达式。我怎么能在Python中做到这一点?

+0

对不起,我没有正确地表达自己。我的意思是从文件名字符串中删除日期时间 – cyberjoac 2014-11-22 17:13:59

+0

从所有的名字,这是一个例子。格式虽然是“filename.Y-M-D.HH-MM-SS.jpg” – cyberjoac 2014-11-22 17:17:59

+1

考虑到字符串总是相同的格式,你可能可以这样做:'lst = mystr.split('。'); mystr = lst [0] +'。' + lst [-1]'。这比Regex更有效率。 – iCodez 2014-11-22 17:37:37

回答

1

可以使用形式的正则表达式

(\.\d{2,4}(-\d{2}){2}){2} 

用法示例

>>> str="001_-_h_-_hydrogen.2014-09-13.14-27-45.jpg" 
>>> re.sub(r'(\.\d{2,4}(-\d{2}){2}){2}', '', str) 
'001_-_h_-_hydrogen.jpg' 

OR

更具体

>>> re.sub(r'(\.\d{2,4}(-\d{2}){2}){2}(?=.jpg)', '', str) 
'001_-_h_-_hydrogen.jpg' 

它所呢?

  • \.匹配的.这里后最低hydrogen

  • \d{2,4}比赛2(用于小时),最多4个(对年)数字点匹配

  • (-\d{2})匹配位2时间即月份和分钟

  • {2}量化二次,即再它无二的匹配项的日期/或第二

  • {2}再次量化匹配整个TIEM

  • (?=.jpg)检查是否匹配的字符串之后是.jpg

你也可以写一个不太神秘的其他长正则表达式,如

\.\d{4}(-\d{2}){2}\.\d{2}(-\d{2}){2}(?=.jpg) 

wh ICH会做同样的目的,

>>> re.sub(r'.\d{4}(-\d{2}){2}\.\d{2}(-\d{2}){2}(?=.jpg)', '', str) 
'001_-_h_-_hydrogen.jpg' 
+0

这是很花哨...这是有道理的,但是由于OP对于重新使用“真的很新”,也许你可以分解你为他/她重复使用重复元素的方式 – beroe 2014-11-22 17:35:23

+1

@beroe我添加了一个解释和直接的方法。希望它现在更有意义:) – nu11p01n73R 2014-11-22 17:45:52

0
>>> x="001_-_h_-_hydrogen.2014-09-13.14-27-45.jpg" 
>>> xnew= re.sub(r'\.\d{4}-\d{2}-\d{2}\.\d{2}-\d{2}-\d{2}', '', x) 
>>> xnew 
'001_-_h_-_hydrogen.jpg' 

参见:Python re