【问题标题】:Using re.match in an If statement in Python在 Python 的 If 语句中使用 re.match
【发布时间】:2013-10-11 16:51:00
【问题描述】:

我正在 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()

这也会返回相同的错误。

谢谢。

【问题讨论】:

    标签: python regex function if-statement


    【解决方案1】:

    您缺少冒号:

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

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

    【讨论】:

    • 我不敢相信我错过了......这很尴尬。谢谢你。让其他人查看您的代码永远不会失败......也感谢您的建议。我明白你的意思了。我会解决的。
    【解决方案2】:

    最后需要一个冒号:

    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 返回匹配)。

    【讨论】:

    • 哦,非常感谢您的建议!使用 while 循环和 if 语句是天才!
    猜你喜欢
    • 2023-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 2013-05-06
    相关资源
    最近更新 更多