pythonregexpython-3.x

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


Solution

  • 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