在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
答案 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:24
和11/30/2003 00:00:01