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

gijlo24d  于 2023-05-08  发布在  其他
关注(0)|答案(2)|浏览(124)

我在分析一个日期。问题是,我的正则表达式省略了任何字母,因为我想避免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-1928-01-1928-JAN-19 13:15:0028-01-19 13:15:0028-01-2019 13:15:00

x0fgdtte

x0fgdtte1#

此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])?

不过,它确实根据您的示例做出了一些假设。首先,它假设您的所有日期始终以2位数的日期开始。它还假设您的月份缩写将是3个字母长。它还假设您的小时、分钟和秒都是2位数。让我知道这些假设是否不正确。

llycmphe

llycmphe2#

正则表达式可能不是您的最佳选择。如果您知道可能遇到的全部格式,那么可以使用常规的DateTime.ParseExact和格式字符串。检查FormatException以了解您是否成功解析了日期。如果你的月份是使用英语缩写然后一定要通过在一个英语文化

DateTime.ParseExact("28-JAN-19", "dd-MMM-yy", new CultureInfo("en"));

相关问题