我正在编写一个正则表达式来验证从2020年开始的年份。下面是我写的正则表达式,
^(20-99)(20-99)$
好像不行。谁能指出我哪里弄错了?
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})$。
^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要好得多。
year >= 2020
**编辑2:**该死,这个正则表达式对于大于9999的年份是错误的用途:
^(20[2-9]\d|2[1-9]\d{2}|[3-9]\d{3}|[1-9]\d{4,})$
如果你输入03852这样的年份,这仍然不起作用。
03852
bwntbbo32#
不确定python是怎么回事,但是对于regex来说,它并不像你想的那样工作......范围是针对单个字符的。因此,如果出于某种原因,你 * 必须 * 有一个regexp(即:某种regexp数据填充验证引擎):
^20[2-9][0-9]|[2-9][1-9][0-9][0-9]$
2020-2099或2100-9999之间的任何数字。
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
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])$
4条答案
按热度按时间vlju58qv1#
正则表达式不接受这样的范围。您可能需要执行以下操作:
我是轻率的,因为你试图使用一个正则表达式,在那里你可以使用一个直接的比较。如果你有一个字符串,首先将字符串转换成整数(如果你甚至需要用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年之前的年份。您可以通过明智地使用
+
来缓解这一问题,例如:......可以工作。
但我希望您会发现,只使用
year >= 2020
要好得多。**编辑2:**该死,这个正则表达式对于大于9999的年份是错误的用途:
如果你输入
03852
这样的年份,这仍然不起作用。bwntbbo32#
不确定python是怎么回事,但是对于regex来说,它并不像你想的那样工作......范围是针对单个字符的。因此,如果出于某种原因,你 * 必须 * 有一个regexp(即:某种regexp数据填充验证引擎):
2020-2099或2100-9999之间的任何数字。
n8ghc7c13#
下面是一个非常短的正则表达式,它可以满足您的需要:
确认:
qmb5sa224#
如果你想从2023年开始这是我做的一个
范围为2023 - 2100年
只要把第一个[3-9]改成你所在的年份,那么明年就是[4-9],以此类推
范围为2024 - 2100年,依此类推,下一年继续改变[4-9]等。
要进一步扩展,请将月份包括为YYYY/MM或YYYY-MM或YYYY MM
我有这个: