我刚尝试了几百个(如果不是数千个......)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]))
答案 0 :(得分:2)
这个在技术上更正确,也可能更有效:
\d+\.((0?\d)|(1\d)|(2[0-3]))(:[0-5]\d){2}
答案 1 :(得分: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]))
答案 2 :(得分: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的有效格式。
答案 3 :(得分:0)
这个对我很有用。
^(\d{1,2}|\d\.\d{2}):([0-5]\d):([0-5]\d)(\.\d+)?$
以下是不同输入的验证结果。
+-----------------------+-------+
| 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 |
+-----------------------+-------+
答案 4 :(得分:0)
下面的正则表达式识别“[-][[dd.]HH:]mm[:ss[.fffffff]]”模式并使用命名组:
(?:(?<ne>-))?(?:(?:(?<dd>0*[0-9]+)[.])?(?:(?<HH>0*[2][0-3]|0*[1][0-9]|0*[0-9])[:]))?(?<mm>(?<=:)0*[0-5]?[0-9]|0*[5-9]?[0-9](?=[:]))(?:[:](?<ss>0*[0-5]?[0-9](?:[.][0-9]{0,7})?))?
C# 代码:
/// <summary>Time Span Standard regular expression.</summary>
/// <remarks>
/// Minutes are mandatory with required colon from left or right.
/// Pattern: [-][[dd.]HH:](:mm|mm:)[:ss[.fffffff]]
/// </remarks>
public const string TimeSpanStandard =
@"(?:(?<ne>-))?" +
@"(?:(?:(?<dd>0*[0-9]+)[.])?(?:(?<HH>0*[2][0-3]|0*[1][0-9]|0*[0-9])[:]))?" +
@"(?<mm>(?<=:)0*[0-5]?[0-9]|0*[5-9]?[0-9](?=[:]))" +
@"(?:[:](?<ss>0*[0-5]?[0-9](?:[.][0-9]{0,7})?))?";
注意:此模式将“dd.HH”视为无效格式。这对我有用,因为我使用这个正则表达式来查找和替换 JSON 字符串中的 TimeSpan,并且支持“dd.HH”格式可能会错误地获取正常数字。
正则表达式值示例:
-01.23:59:30.999999 - ✔
Match 1 0-19 -01.23:59:30.999999
Group ne 0-1 -
Group dd 1-3 01
Group HH 4-6 23
Group mm 7-9 59
Group ss 10-19 30.999999
Regex Pass:
01.02:03:04.05 - ✔
01.02:03:04 - ✔
01.02:03 - ✔
02:03:04.05 - ✔
03:04.05 - ✔
02:03 - ✔
02:03:04 - ✔
Regex Fail:
1.03:04.05 - ✗
04.05 - ✗