Timespan-Regex与Days-Portion

我刚尝试了几百个(如果不是数千个……)RegEx可以得到我想要的东西……但是它们都没有用。

我只是在寻找一个正则表达式,代表TimeSpan 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]))

这是因为您的正则表达式模式预计会有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])) 

这个在技术上更正确,也可能更有效:

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

接受的答案似乎不适用于基本情况。

遵循TimeSpan解析规则,我提出了这种模式。

^((?:-?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的有效格式。

这个对我很有用。

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

以下是不同输入的validation结果。

 +-----------------------+-------+ | Input | Valid | +-----------------------+-------+ | 1.10:14:15.1 | True | +-----------------------+-------+ | .10:14:15.1 | False | +-----------------------+-------+ | 1.10:14:15. | False | +-----------------------+-------+ | 1.10:14:15.123haha456 | False | +-----------------------+-------+ | 10:14:15.1 | True | +-----------------------+-------+ | 100:14:15.1 | False | +-----------------------+-------+ | 6:14:15.1 | True | +-----------------------+-------+ | :14:15.1 | False | +-----------------------+-------+ | 00:14:15 | True | +-----------------------+-------+