2012-09-15 90 views
1

我剛剛嘗試過幾百個(如果不是幾千...)RegEx的可用來獲得我想要的...但他們都沒有工作。Timespan-Regex with Days-Portion

我只是在尋找一個正則表達式,它表示一個時間跨度days.hours:minutes:seconds: 7.00:00:00將表示 「7天」

這一個可悲的是不起作用:

(\d\d).(\d\d):(([0-6][0])|([0-5][0-9])):(([0-6][0])|([0-5][1-9]))

回答

1

這是因爲你的正則表達式模式期待2位數天,而你只有1位數。只需讓第一個數字可選?

(\d?\d)\.(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])) 

或更好,但只使用+匹配一個或更多,因爲這種模式仍然不匹配100天

(\d+)\.(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])) 
+0

哦,你當然是對的......謝謝! :) – SeToY

3

這一個是技術上更正確,可能更有效得:

\d+\.((0?\d)|(1\d)|(2[0-3]))(:[0-5]\d){2} 
+0

由於某些原因,SO只顯示反斜槓點(刪除反斜槓),所以我在編輯時放置了一個額外的反斜槓,現在輸出顯示正確。 – dotNET

+0

編輯答案將表達式顯示爲代碼。 – Bas

1

接受的答案似乎不適用於基本情況。

TimeSpan parsing rule我想出了這種模式。

^((?:-?0*\d+\.)?(?:0*)(?:2[0-3]|1[0-9]|[0-9]))(?::0*([0-5]?[0-9]))?(?::0*((?:[0-5]?[0-9])(?:\.\d{0,7})?))?$

注意這種模式將通過10.12格式,而MSDN標誌着這是一個無效的格式。這應該是IMO的有效格式。

+0

這是正確的答案。 –