我很努力想要得到一個正則表達式,可以用於下面的格式。指針appeciated正則表達式格式(HHh MMs SSs)可選小時
(43m 12s)
(13m 11s)
(11h 43m 12s)
(1h 43m 12s)
編輯:
以上的例子是更長的串的一部分。
EDIT2:
這是我現在有:
\s\(\s\d{1,2}[a-z]\s.*\)
我很努力想要得到一個正則表達式,可以用於下面的格式。指針appeciated正則表達式格式(HHh MMs SSs)可選小時
(43m 12s)
(13m 11s)
(11h 43m 12s)
(1h 43m 12s)
編輯:
以上的例子是更長的串的一部分。
EDIT2:
這是我現在有:
\s\(\s\d{1,2}[a-z]\s.*\)
如果您不需要捕捉小時分秒,這將工作:\(\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?\)
。
希望這會有所幫助:)
你不一定需要使用正則表達式來處理它。
這裏是另一種選擇 - 使用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
格式。