coincidir fechas usando expresiones regulares de python

Quiero hacer coincidir las fechas que tienen el siguiente formato:

2010-08-27, 2010/08/27

En este momento no soy muy particular en cuanto a que la fecha sea realmente factible, solo que está en el formato correcto.

por favor diga la expresión regular para esto

Gracias

Puede usar el módulo datetime para analizar las fechas:

 import datetime print datetime.datetime.strptime('2010-08-27', '%Y-%m-%d') print datetime.datetime.strptime('2010-15-27', '%Y-%m-%d') 

salida:

 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' 

Entonces la captura de ValueError le dirá si la fecha coincide:

 def valid_date(datestring): try: datetime.datetime.strptime(datestring, '%Y-%m-%d') return True except ValueError: return False 

Para permitir varios formatos, puede probar todas las posibilidades, o usar re para analizar los campos primero:

 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 

Puedes usar este código:

 import re # regular expression to match dates in format: 2010-08-27 and 2010/08/27 # date_reg_exp = re.compile('(\d+[-/]\d+[-/]\d+)') 

Expresión regular actualizada a continuación:

 # regular expression to match dates in format: 2010-08-27 and 2010/08/27 # and with mixed separators 2010/08-27 # date_reg_exp = re.compile('\d{4}[-/]\d{2}[-/]\d{2}') # if separators should not be mixed use backreference: date_reg_exp = re.compile('\d{4}(?P[-/])\d{2}(?P=sep)\d{2}') # a string to test the regular expression above test_str= """ fsf2010/08/27sdfsdfsd dsf sfds f2010/08/26 fsdf asdsds 2009-02-02 afdf """ # finds all the matches of the regular expression and # returns a list containing them matches_list=date_reg_exp.findall(test_str) # iterates the matching list and prints all the matches for match in matches_list: print match 

Utilice el módulo datetime . Aquí hay una expresión regular para el conocimiento, aunque no deberías usarla:

 r'\d{4}[-/]\d{2}[-/]\d{2}' 

El paquete dateutil tiene un analizador de fechas bastante inteligente. Analiza una amplia gama de formatos de fecha. http://pypi.python.org/pypi/python-dateutil