2

MM/DD/YYYY の形式で日付を受け取り、正規表現で検証する関数を Python で設定しています。これは私が今持っているものです:

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 に答える