正则表达式年份格式认证

时间:2018-07-03 05:47:55

标签: regex python-3.x

我有一个程序,要求用户提供会话年,其格式应为20XX-20XX。这里的约束是它必须是一年,然后是下一年。例如。 2019-2020。

例如,
无效格式:

2019-2020
2018-2019
2000-2001

无效的发件人:

2019-2021
2000-2000
2019-2018

我正在尝试使用正则表达式验证此输入。

我的工作:

import re

def add_pages(matchObject):
    return "{0:0=3d}".format(int(matchObject) + 1)

try:

    a = input("Enter Session")

    p = r'2([0-9]{3})-2'
    p1= re.compile(p)        

    x=add_pages(p1.findall(a)[0])

    p2 = r'2([0-9]{3})-2'+x
    p3 = re.compile(p2)
    l=p3.findall(a)

    if not l:
        raise Exception
    else:
        print("Authenticated")

except Exception as e:
    print("Enter session. Eg. 2019-2020")

问题:
到目前为止,我还无法检索将验证此输入的单个正则表达式。我确实看过backreferencing in regex,但它只能解决一半的查询。我正在寻找改善此身份验证过程的方法。是否有单个正则表达式语句将检查此约束?让我知道是否需要更多信息。

2 个答案:

答案 0 :(得分:0)

首先,为什么要使用正则表达式?正则表达式在数学上很糟糕。这样做会更容易:

X-XSS-Protection: 1; mode=block

答案 1 :(得分:0)

您真的需要一次输入会议年数吗? 我认为最好有两个输入(或者将会话年自动设置为第一年+ 1)。

我不知道您是否打算追求更大的目标,这只是一个例子,但对我而言,使用正则表达式似乎不适合该任务。

例如,您可以执行以下操作:

print("Enter session year")
first_year = int(input("First year: "))
second_year = int(input("Second year: "))

if second_year != (first_year + 1):
    # some validation
else:
    # program continues