5

こんにちは、文字列のどこに - または のような文字があるかを確認する正規表現を作成しました。または/または:またはAMまたはPMまたはスペース。次の正規表現はそのために機能しますが、文字列にAMP以外の文字が含まれている場合はケースを失敗させたいです。再輸入

Datere = re.compile("[-./\:?AMP ]+")

FD = { 'Date' : lambda date : bool(re.search(Datere,date)),}

def Validate(date):

    for k,v in date.iteritems():
        print k,v
        print FD.get(k)(v)

出力:

Validate({'Date':'12/12/2010'})
Date 12/12/2010
True
Validate({'Date':'12/12/2010 12:30 AM'})
Date 12/12/2010
True

Validate({'Date':'12/12/2010 ZZ'})
Date 12/12/2010
True  (Expecting False)

編集: Validate({'Date':'12122010'}) 日付 12122010 False (False を期待)

char APM以外の文字列を見つけるにはどうすればよいでしょうか。どうもありがとうございます。

4

4 に答える 4

1

これを試してみてください:

^[-./\:?AMP \d]*$

正規表現への変更は次のとおりです。

  • ^と$で固定されています。これは、行全体が一致し、部分的に一致しないことを意味します
  • 数字を許可するために\dが文字クラスに追加されます

これで、正規表現は基本的に1行で許可される記号のリストとして読み取られます

空の文字列を一致させたくない場合は、*を+に変更します

于 2012-05-22T12:43:15.710 に答える
1

代わりに、次のような式を使用できます。

^[-0-9./:AMP ]+$

^文字列の最初と最後に式を$固定し、他に何もないことを確認します(後のオプションの改行を除く$)。

于 2012-05-22T12:44:01.870 に答える
1

ちょっと精巧ですが、トリックを行います。

import re
Datere = re.compile("""
    ^(?:\d\d[-./\:]){2} ## dd_SEP_dd
    \d{4}\s* ## year may be followed by  spaces
    (?:\d\d[-./\:]\d\d\s+(?:AM|PM))? ## hh_SEP_mm spaces followed by AM/PM and this is optional
    \s*$""",re.X)

FD = { 'Date' : lambda date : bool(re.search(Datere,date)),}

def Validate(date):

    for k,v in date.iteritems():
        print k,v
        print FD.get(k)(v)

print Validate({'Date':'12/12/2010'})
print Validate({'Date':'12/12/2010 12:30 AM'})
print  Validate({'Date':'12/12/2010 ZZ'})
于 2012-05-22T13:43:34.650 に答える
1

これにアプローチする方法は、「-30/A-MP/2012/12」、「-30/A-MP/20PA12/12」のような文字化けした入力を処理するには単純すぎます。

日付を確実に検証したい場合は、次のようにします。

import datetime
date = '12-12-2012 10:45 AM'
formats = ("%d-%m-%Y %I:%M %p", "%d/%m/%Y %I:%M %p", ...)
for fmt in formats:
    try:
        valid_date = datetime.datetime.strptime(date, fmt)
    except ValueError as e:
        print(e)

可能なすべての形式を定義する必要がありますが、完全な日時オブジェクト (または時刻または日付オブジェクト、それらは同様に機能します) を取得し、それらが有効であることを完全に確信できます。利用可能なフォーマット指定子の完全な説明: http://docs.python.org/library/time.html#time.strftime

于 2012-05-22T13:23:58.893 に答える