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

q5lcpyga  于 2023-03-20  发布在  其他
关注(0)|答案(4)|浏览(222)

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

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

好像不行。谁能指出我哪里弄错了?

vlju58qv

vlju58qv1#

正则表达式不接受这样的范围。您可能需要执行以下操作:

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这样的年份,这仍然不起作用。

bwntbbo3

bwntbbo32#

不确定python是怎么回事,但是对于regex来说,它并不像你想的那样工作......范围是针对单个字符的。因此,如果出于某种原因,你 * 必须 * 有一个regexp(即:某种regexp数据填充验证引擎):

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

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

n8ghc7c1

n8ghc7c13#

下面是一个非常短的正则表达式,它可以满足您的需要:

^(?![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
qmb5sa22

qmb5sa224#

如果你想从2023年开始这是我做的一个

^20([2-9][3-9]|[3-9][0-9])|2100$

范围为2023 - 2100年
只要把第一个[3-9]改成你所在的年份,那么明年就是[4-9],以此类推

^20([2-9][4-9]|[3-9][0-9])|2100$

范围为2024 - 2100年,依此类推,下一年继续改变[4-9]等。
要进一步扩展,请将月份包括为YYYY/MM或YYYY-MM或YYYY MM
我有这个:

^(20([2-9][3-9]|[3-9][0-9])|2100)[\s\/-](0[1-9]|1[0-2])$

相关问题