match dates using python regular expressions

后端 未结 4 1853
梦毁少年i
梦毁少年i 2020-12-03 07:56

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

4条回答
  •  再見小時候
    2020-12-03 08:27

    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 
        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
    

提交回复
热议问题