2

我正在 Python 中设置一个函数来接收格式为 MM/DD/YYYY 的日期,然后使用正则表达式对其进行验证。这就是我现在所拥有的:

def getdate():
    date = raw_input("Please enter the date completed (MM/DD/YYY): ")
    if re.match(r"\d{2}/\d{2}/\d{4}", date)
        break
    else:
        print "Incorrect date format"
        getdate()

系统不断返回指向“if”行中右括号的语法错误。我似乎无法弄清楚它到底在考虑什么语法错误。我也试过这个没有成功:

def getdate():
    date = raw_input("Please enter the date completed (MM/DD/YYY): ")
    valid = "(\d{2}/\d{2}/\d{4})"
    if re.match(valid, date)
        break
    else:
        print "Incorrect date format"
        getdate()

这也返回相同的错误。

谢谢。

4

2 回答 2

2

你错过了冒号:

if re.match(r"\d{2}/\d{2}/\d{4}", date):  # <-- colon needs to be here

PS:请不要使用递归来要求重复输入。你最终可能会炸毁堆栈。最好使用循环。此外,设计一些方法允许用户只进行一定次数的尝试,以避免无限循环。

于 2013-10-11T16:51:40.677 回答
1

最后需要一个冒号:

if re.match(r"\d{2}/\d{2}/\d{4}", date):
#                               here --^

Python 使用冒号来结束语句。

此外,正如@RohitJain 所说,使用递归来要求重复输入是不好的做法。你可能想让你的代码像这样:

def getdate():
    date = raw_input("Please enter the date completed (MM/DD/YYY): ")
    valid = "(\d{2}/\d{2}/\d{4})"
    while not re.match(valid, date):
        print "Incorrect date format"
        date = raw_input("Please enter the date completed (MM/DD/YYY): ")
    return date

这个新代码使用一个循环,该循环一直运行到输入满足规范(即re.match返回匹配项)。

于 2013-10-11T16:51:34.620 回答