1

我刚刚尝试了数百个(如果不是数千个......)正则表达式来获得我想要的......但它们都没有奏效。

我只是在寻找一个代表 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]))

4

5 回答 5

3

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

\d+\.((0?\d)|(1\d)|(2[0-3]))(:[0-5]\d){2}
于 2012-09-15T16:09:24.847 回答
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 的有效格式。

于 2014-08-27T03:48:17.947 回答
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]))
于 2012-09-15T16:06:44.060 回答
1

下面的正则表达式识别“[-][[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 - ✗
于 2021-07-13T15:00:54.323 回答
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  |
+-----------------------+-------+
于 2018-04-13T06:00:40.593 回答