您好我已经写了正则表达式来检查字符串中的字符串是什么样的 - 或者。或/或:或AM或PM或空格。如果字符串包含除AMP之外的字符,则我希望使case失败。 导入重新
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)
编辑: 验证({ '日期': '12122010'}) 日期12122010 假(期待错误)
我怎么能找到除了char APM以外的字符串的任何建议。谢谢。
答案 0 :(得分:1)
尝试一下:
^[-./\:?AMP \d]*$
正则表达式的更改
现在正则表达式基本上读作1行上允许的符号列表
如果您希望空字符串不匹配,请将*更改为+
答案 1 :(得分:1)
您可以使用这样的表达式:
^[-0-9./:AMP ]+$
^
和$
将表达式锚定在字符串的开头和结尾处,确保其中没有其他内容($
之后的可选换行除外)。
答案 2 :(得分: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
答案 3 :(得分: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'})