好的,我已经和这个问题抗争了很久了。 我有一个正则表达式
^(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,这正是我所需要的。到目前为止还不错。但是我不希望它匹配08/01/2015,但我在08/01上得到了部分匹配。我该如何忽略08/01/2015?
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"]
。TryParseExact
解析像08/01/2015是一个示例日期
这样的字符串呢?或者像08/2015是一个示例日期
这样的正确示例。 - Sebastian Schumann^\d{1,2}\/(?:\d{2}|\d{4})(?!\/)
C#
,为什么要使用正则表达式呢?你几乎肯定会发现在某些特殊情况下,使用正则表达式得到的答案是错误的。考虑闰年和月份少于30天的情况呢?问题还有很多其他方面需要考虑。相比之下,使用DateTime
库更为可靠。 - Rob(?!/)
. - Sebastian Schumann