2014-11-22 53 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