I want to match dates that have the following format:
2010-08-27, 2010/08/27
Right now I am not very particular about the date being actually feasible, but just that it is in the correct format.
please tell the regular expression for this.
Thanks
You can use the datetime
module to parse dates:
import datetime
print datetime.datetime.strptime('2010-08-27', '%Y-%m-%d')
print datetime.datetime.strptime('2010-15-27', '%Y-%m-%d')
output:
2010-08-27 00:00:00
Traceback (most recent call last):
File "./x.py", line 6, in <module>
print datetime.datetime.strptime('2010-15-27', '%Y-%m-%d')
File "/usr/lib/python2.7/_strptime.py", line 325, in _strptime
(data_string, format))
ValueError: time data '2010-15-27' does not match format '%Y-%m-%d'
So catching ValueError
will tell you if the date matches:
def valid_date(datestring):
try:
datetime.datetime.strptime(datestring, '%Y-%m-%d')
return True
except ValueError:
return False
To allow for various formats you could either test for all possibilities, or use re
to parse out the fields first:
import datetime
import re
def valid_date(datestring):
try:
mat=re.match('(\d{2})[/.-](\d{2})[/.-](\d{4})$', datestring)
if mat is not None:
datetime.datetime(*(map(int, mat.groups()[-1::-1])))
return True
except ValueError:
pass
return False