RegEx匹配M/YYYY、MM/YYYY、M/YY或MM/YY格式,但不匹配MM/DD/YYYY

本文关键字:YYYY MM YY 不匹配 DD 匹配 RegEx 格式 | 更新日期: 2023-09-27 18:26:52

好吧,我已经为此奋斗了足够长的时间。我有一个正则表达式

^(1[0-2]|0[1-9]|'d)'/(20'd{2}|19'd{2}|0(?!0)'d|[1-9]'d)

它将匹配8/15,08/15,8/2015,08/2015所有我需要的。到目前为止还不错。但我不需要的是与2015年1月8日比赛,但我在8月1日获得了部分比赛。如何忽略08/01/2015?

RegEx匹配M/YYYY、MM/YYYY、M/YY或MM/YY格式,但不匹配MM/DD/YYYY

DateTime.ParseExact是解决问题的一种可读性和可维护性更强的方法:https://msdn.microsoft.com/en-us/library/332de853(v=vs.110).aspx

如果我是你的同事,我会讨厌读这个丑陋的正则表达式,因为同一个概念可以用指定的库类如此优雅地表达。

实际上,一个更好的想法是TryParseExact:https://msdn.microsoft.com/en-us/library/h9b85w22(v=vs.110).aspx

正如您所看到的,有一个重载可以接受多种格式,这正是您的情况,您可以传递["M/yyyy", "MM/yyyy, "M/yy", "MM/yy"]

下面是一个与您的案例非常相似的代码示例:https://stackoverflow.com/a/18247797/326370

如果字符串以数字开头,则可以使用以下regex。

^'d{1,2}'/(?:'d{2}|'d{4})(?!'/)