Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

match dates using python regular expressions

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

like image 291
user1308308 Avatar asked Apr 02 '12 14:04

user1308308


People also ask

Is match a regex function in Python?

match() re. match() function of re in Python will search the regular expression pattern and return the first occurrence. The Python RegEx Match method checks for a match only at the beginning of the string.


1 Answers

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
like image 139
hochl Avatar answered Sep 18 '22 06:09

hochl