-1

在 RegExLib 站点中找到此日期时间正则表达式 -> http://regexlib.com/REDetails.aspx?regexp_id=361

    string pattern = @"(((((0[13578])|([13578])|(1[02]))[\-\/\s]?((0[1-9])|([1-9])|([1-2][0-9])|(3[01])))|((([469])|(11))[\-\/\s]?((0[1-9])|([1-9])|([1-2][0-9])|(30)))|((02|2)[\-\/\s]?((0[1-9])|([1-9])|([1-2][0-9]))))[\-\/\s]?\d{4})(\s(((0[1-9])|([1-9])|(1[0-2]))\:([0-5][0-9])((\s)|(\:([0-5][0-9])\s))([AM|PM|am|pm]{2,2})))?";
    var match = Regex.Match("test 123 11/30/2003 10:12:24 am", pattern, RegexOptions.IgnoreCase);

我正在寻找的日期时间格式是 m/d/yyyy hh:mm:ss

以上查找 m/d/yyyy hh:mm am|pm

4

2 回答 2

1

一般来说,它应该类似于以下内容。

(0?[1-9]|1[012])        // month
[\s\/-]                 // delimiter - space, fwd. slash or dash
(0?[1-9]|[12]\d|3[01])  // day
[\s\/-]                 // delimiter - space, fwd. slash or dash
\d{4}                   // year
\s                      // delimiter - space
(0?\d|1\d|2[0-3])       // hours
\:                      // delimiter - colon
(0?\d|[1-5]\d)          // minutes
\:                      // delimiter - colon
(0?\d|[1-5]\d)          // seconds

如果您不想将 0、1、2 等数字用于单个数字,请删除零旁边的问号,以便它们需要前面的零。此外,您应该在下一步中验证日期以确保它存在。例如,31.02.2012 不应该通过。您可能需要一个结束规则,例如对空格、punc 的积极前瞻。标记,词尾等,以避免在:90:231时验证秒数。

无论如何,我没有使用 c#,所以我不确定如何正确包装它,但我希望这会有所帮助。

编辑 1:缩短了正则表达式 - 所有的出现都[0-9]变成了\d
编辑 2:这是需要在单个数字前面加上零的版本:

(0[1-9]|1[012])        // month
[\s\/-]                // delimiter - space, fwd. slash or dash
(0[1-9]|[12]\d|3[01])  // day
[\s\/-]                // delimiter - space, fwd. slash or dash
\d{4}                  // year
\s                     // delimiter - space
([01]\d|2[0-3])        // hours
\:                     // delimiter - colon
[0-5]\d                // minutes
\:                     // delimiter - colon
[0-5]\d                // seconds
于 2012-09-23T01:23:23.953 回答
0

使用RegexBuddy的两分钟工作给了我一个解决方案:

string pattern = @"(((((0[13578])|([13578])|(1[02]))[\-\/\s]?((0[1-9])|([1-9])|([1-2][0-9])|(3[01])))|((([469])|(11))[\-\/\s]?((0[1-9])|([1-9])|([1-2][0-9])|(30)))|((02|2)[\-\/\s]?((0[1-9])|([1-9])|([1-2][0-9]))))[\-\/\s]?\d{4})(\s(((0[1-9])|([1-9])|([0-2][0-3]))\:([0-5][0-9])((\s)|(\:([0-5][0-9])))))";

这与11/30/2003 10:12:24您的测试表达式匹配。它也匹配11/30/2003 23:12:2411/30/2003 00:00:01

于 2012-09-23T00:51:29.780 回答