从2020年开始验证年份的正则表达式

时间:2011-09-26 18:40:52

标签: python regex

我正在编写一个正则表达式来验证从2020年开始的年份。

以下是我写的正则表达式

^(20-99)(20-99)$

它似乎不起作用。任何人都可以指出哪里弄错了?

3 个答案:

答案 0 :(得分:5)

正则表达式不会采用这样的范围。你会想要做的事情:

if( year >= 2020 )
  presto

我很轻浮,因为你正试图使用​​正则表达式,你只需要使用直接的比较。如果你有一个字符串,首先将字符串转换为整数(如果你甚至需要用Python做)。否则,你将会有一些难以维护的非常丑陋的正则表达式。

编辑:如果您真的热衷于使用正则表达式(或三个),那么您的问题可以分为三个正则表达式:^20[2-9]\d$^2[1-9]\d\d$^[3-9]\d{3}$四个字符年。您可以将这些组合到^(20[2-9]\d|2[1-9]\d\d|[3-9]\d{3})$

但请注意,正则表达式是a)丑陋如地狱,而b)只接受多达9999年。您可以通过明智地使用+来缓解这一点,所以类似于:

^(20[2-9]\d+|2[1-9]\d{2,}|[3-9]\d{3,})$

......可以工作。

但我希望你会发现只做year >= 2020会好很多。

编辑2:地狱,这个正则表达式错误的年份大于9999.你可能想要使用:

^(20[2-9]\d|2[1-9]\d{2}|[3-9]\d{3}|[1-9]\d{4,})$

如果您输入03852之类的年份,那仍然无效。

答案 1 :(得分:1)

不确定python但是w.r.t.正则表达式它不像你在想的那样工作......范围是针对单个字符的。所以如果由于某种原因你必须有一个regexp(即:某种regexp数据填充验证引擎):

^20[2-9][0-9]|[2-9][1-9][0-9][0-9]$

2020-2099或2100-9999的任何数字。

答案 2 :(得分:0)

这是一个显着缩短的正则表达式,可以满足您的需求:

^(?![01]|20[01])\d{4}$

验证:

>>> regex = re.compile(r'^(?![01]|20[01])\d{4}$')
>>> all(regex.match(str(x)) if x >= 2020 else not regex.match(str(x)) for x in xrange(10000))
True