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 | +-----------------------+-------+