通用C#DateTime正则表达式,如Microsoft的tryparse

Cla*_*aro 0 .net c# regex

我想创建一个通用的DateTime正则表达式,它将匹配所有可能的C#DateTime格式,如Microsoft的TryParse.

MM/dd/Year
dd/MM/Year
dd/MM/YY
MM/dd/YY
dd/MM/Year hh:mm
...
Run Code Online (Sandbox Code Playgroud)

你有什么建议吗?如果它很简单,我也可以将日期与时间分开.并为Date创建正则表达式,为Time创建一个正则表达式.

ste*_*ema 5

不,你不想这样做.您将不得不处理数字范围,而不是创建正则表达式.不要谈论每月和闰年的不同天数.(例如,请参见此处,此解决方案不考虑闰年,仅适用于一种模式.)

什么错与DateTime.Parse方法(String)

你可以做点什么

string t = "01/01/1899";
DateTime Date = DateTime.Parse(t);
Run Code Online (Sandbox Code Playgroud)

并且它将引发FormatExceptionif t不是有效的DateTime格式.

更新:在文本中查找模式

好的,要在文本中找到日期/时间模式,而不进行验证,您可以尝试这样的事情:

\b\d{1,2}/\d{1,2}/\d{2,4}(?:\s+\d{1,2}:\d{1,2})?\b
Run Code Online (Sandbox Code Playgroud)

您可以在Regexr上自己查看和测试它

简短介绍:

\b 它是一个单词边界,它确保在第一个数字之前和最后一个数字之后既不是另一个数字也不是字母.

\d是一个数字.\d{1,2}是一两位数.

\s是一个空白.\s+是一个或多个空格.

(?: ... )?是一个非捕获组,因为?最后这个组(这里是时间模式)是可选的.

我认为应该主要是创建模式以查找所需的所有日期/时间格式.