我正在尝试解析一个日期。问题是我的正则表达式忽略了任何字母,因为我想避免使用01-28-2019 UTC
或在主要日期以外的任何字母。现在,当日期格式如我刚刚列出的那样时,它可以正常工作,但是当日期格式为28-JAN-19
时,它就失败了。
var sourceValue = Regex.Replace("28-JAN-19", @"[A-Za-z]", "");
var parsed = DateTime.Parse(sourceValue);
我需要解析的日期可以采用几种不同的格式。可以使用正则表达式来处理吗?如果是这样,需要进行哪些调整以修剪字符串xx-xx-xx
部分之外的所有字母?
28-JAN-19
28-01-19
28-JAN-19 13:15:00
28-01-19 13:15:00
28-01-2019 13:15:00
答案 0 :(得分:1)
正则表达式可能不是您最好的选择。如果您知道可能会遇到的全部格式,则可以将常规DateTime.ParseExact与格式字符串一起使用。检查FormatException
以了解您是否已成功解析日期。如果您的月份使用的是英文缩写,请确保传承英语文化
DateTime.ParseExact("28-JAN-19", "dd-MMM-yy", new CultureInfo("en"));
答案 1 :(得分:1)
此RegEx应该与您提供的所有示例匹配:
[0-9]{2}-([A-Za-z]{3}|[0-9]{2})-[0-9]{2,4}( [0-9][0-9]?:[0-9][0-9]?:[0-9][0-9])?
不过,根据您的示例,它确实有两个假设。首先,假设您的所有日期都将始终以两位数的日期开始。它还假设您的月份缩写为3个字母长。它还假设您的小时,分钟和秒均为2位数字。让我知道这些假设是否不正确。
这里是fiddle