2016-09-07 46 views
0

我很努力想要得到一個正則表達式,可以用於下面的格式。指針appeciated正則表達式格式(HHh MMs SSs)可選小時

(43m 12s) 
(13m 11s) 
(11h 43m 12s) 
(1h 43m 12s) 

編輯:

以上的例子是更長的串的一部分。

EDIT2:

這是我現在有:

\s\(\s\d{1,2}[a-z]\s.*\) 

回答

1

如果您不需要捕捉小時分秒,這將工作:\(\s?(?:\d{1,2}\w)+\s?\)你可以看到它在這裏工作:https://regex101.com/r/yC8iH6/1

[編輯]

如果:添加如果需要捕捉你需要捕獲你可以這樣做: \(\s?(?:(\d{1,2})\w\s?)?(?:(\d{1,2})\w\s?)(?:(\d{1,2})\w\s?)\s?\)。請注意,第一個分組是可選的。

你可以在這裏看到這個工作版本:https://regex101.com/r/yC8iH6/2

另外微粒,第一個非捕獲正則表達式可以像這樣寫更精確\(\s?(?:\d{1,2}\w){2,3}\s?\)

希望這會有所幫助:)

2

你不一定需要使用正則表達式來處理它。

這裏是另一種選擇 - 使用dateutil日期時間解析器:

>>> from dateutil.parser import parse 
>>> l = ["43m 12s", "13m 11s", "11h 43m 12s", "1h 43m 12s"] 
>>> for item in l: 
...  dt = parse(item) 
...  print(item, dt.hour, dt.minute, dt.second) 
... 
('43m 12s', 0, 43, 12) 
('13m 11s', 0, 13, 11) 
('11h 43m 12s', 11, 43, 12) 
('1h 43m 12s', 1, 43, 12) 

或者,你可以使用time.strptime()嘗試%Hh %Mm %Ss,如果失敗,嘗試%Mm %Ss格式。