-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

1桁に0、1、2などの数字を許可したくない場合は、ゼロの横にある疑問符を削除して、それらの前にゼロが必要になるようにします。また、次のステップで日付を確認して、日付が存在することを確認する必要があります。たとえば、2012年2月31日は合格すべきではありません。また、スペースの前向きな先読み、パンクなどの終了ルールが必要になる場合があります。:90または:231のときに秒が検証されないように、マーク、単語の終わりなど。

とにかく私はc#を使用していないので、これを正しくラップする方法がわかりませんが、それが役立つことを願っています。

編集1:正規表現を短縮しました-のすべての出現は編集2[0-9]になりました:そしてこれが1桁の前にゼロを必要とするバージョンです:\d

(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

Two minutes of work using RegexBuddy gave me a solution of:

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])))))";

This matches 11/30/2003 10:12:24 in your test expression. It also matches 11/30/2003 23:12:24 and 11/30/2003 00:00:01

于 2012-09-23T00:51:29.780 に答える