5

嗨,我已经编写了正则表达式来检查字符串在哪里具有类似 - 或的字符。或 / 或 : 或 AM 或 PM 或空格。 follworig 正则表达式适用于此,但如果字符串包含 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

你处理这个问题的方式太天真了,无法处理像“-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 回答
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 回答