如何从寻找上午/下午改为寻找秒

时间:2012-09-23 00:31:56

标签: c# regex

在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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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