如何使用正则表达式检查字符串是否为日期F#

如何使用正则表达式检查字符串是否为日期F#,f#,F#,我正在寻找使用正则表达式命令,可以告诉是否是一个日期或不列在下面的日期的格式,他们将出现。现在我需要实现模式匹配,以便能够区分哪一个是日期,哪一个不是日期 15-Aug-20 123 9-Sept-20 352 1-Jan-21 正如评论中提到的,您应该避免使用不明确的非标准日期格式,而只使用一种可以用内置的DateTime.Parse进行解析的格式 但是,如果您试图解析其他人生成的错误数据(即“真实世界数据科学”:-),则以下正则表达式适用于您提供的示例: Regex.Match(sampl

我正在寻找使用正则表达式命令,可以告诉是否是一个日期或不列在下面的日期的格式,他们将出现。现在我需要实现模式匹配,以便能够区分哪一个是日期,哪一个不是日期

15-Aug-20
123
9-Sept-20
352
1-Jan-21

正如评论中提到的,您应该避免使用不明确的非标准日期格式,而只使用一种可以用内置的
DateTime.Parse进行解析的格式

但是,如果您试图解析其他人生成的错误数据(即“真实世界数据科学”:-),则以下正则表达式适用于您提供的示例:

Regex.Match(sample, "(\d{1,2})-(Aug|Sept|Jan)-(\d{2})")
这会保守地查找1-2位数字,然后是一个预定义的月份(您需要添加其他您想要支持的月份)和两位数字。使用您的示例数据进行测试:

let data = 
  [ "15-Aug-20"; "123"; "9-Sept-20"; "352"; "1-Jan-21" ]


for d in data do
  let res = Regex.Match(d, "(\d{1,2})-(Aug|Sept|Jan)-(\d{2})")
  if res.Success then 
    printfn "%s is a date. Day: %d, Month: %s, Year: %d" d 
      (int res.Groups.[1].Value)
      (res.Groups.[2].Value)
      (int res.Groups.[3].Value)

为什么要使用正则表达式而不是
DateTime.Parse
?另外,那是什么日期?1915? 1920? 两位数的年份是绝对没有理由的。因为他们使用两位数的年份,所以不需要模式匹配或正则表达式。您需要解析器在
DateTime.Parse中已经可用。和一个合适的字符串。所有这些值都应视为无效