如何使用C#正则表达式匹配各种日期格式并获取日,月和年?

kod*_*bot -2 c# regex datetime

下面列出了已知的格式

dd/mm/yyyy (01/01/2015)
d/m/yyyy (1/1/2015)
dd/mm/yy (01/01/15)
d/m/yy (1/1/15)
Run Code Online (Sandbox Code Playgroud)

其他变体将破折号( - ),点(.)或空格作为字段分隔符.

我正在考虑为每个模式创建一个正则表达式以保持其可维护性,但不确定是否有更好的解决方案.请分享是否有更好的解决方案.

更新: 日期是大文本的一部分,在从文本中提取潜在的日期列表之前,我无法使用DateTime.TryParseExact.

Son*_*nül 6

我不知道正则表达式,但DateTime.TryParseExact有一个重载,它将格式作为字符串数组.

您可以轻松提供所有格式,并尝试将字符串与其中一种匹配.

顺便说一句,mm说明符是几分钟,如果你试图提及几个月,MM说明符是几个月.

string s = "";
var formats = new string[]
{
             "dd/MM/yyyy",
             "d/M/yyyy",
             "dd/mm/yy",
             "d/m/yy",

             "dd-MM-yyyy",
             "d-M-yyyy",
             "dd-MM-yy",
             "d-M-yy",

             "dd.MM.yyyy",
             "d.M.yyyy",
             "dd.MM.yy",
             "d.M.yy",

             "dd MM yyyy",
             "d M yyyy",
             "dd MM yy",
             "d M yy",
};
DateTime dt;
if (DateTime.TryParseExact(s, formats, CultureInfo.InvariantCulture,
                              DateTimeStyles.None, out dt))
{
    // Your string is matched one of first successfull match
}
Run Code Online (Sandbox Code Playgroud)