如何在字符串的某些位置允许字符

时间:2019-01-23 17:34:22

标签: c# regex

我正在尝试解析一个日期。问题是我的正则表达式忽略了任何字母,因为我想避免使用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

2 个答案:

答案 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