Expresiones regulares de Python para coincidir fechas

¿Qué expresión regular en Python utilizo para hacer coincidir fechas como esta: “11/12/98”?

En lugar de usar expresiones regulares, generalmente es mejor analizar la cadena como un objeto datetime.datetime :

 In [140]: datetime.datetime.strptime("11/12/98","%m/%d/%y") Out[140]: datetime.datetime(1998, 11, 12, 0, 0) In [141]: datetime.datetime.strptime("11/12/98","%d/%m/%y") Out[141]: datetime.datetime(1998, 12, 11, 0, 0) 

Luego, podría acceder al día, mes y año (y hora, minutos y segundos) como atributos del objeto datetime.datetime :

 In [143]: date.year Out[143]: 1998 In [144]: date.month Out[144]: 11 In [145]: date.day Out[145]: 12 

Para probar si una secuencia de dígitos separados por barras diagonales representan una fecha válida, puede usar un bloque try..except . Las fechas no ValueError un ValueError :

 In [159]: try: .....: datetime.datetime.strptime("99/99/99","%m/%d/%y") .....: except ValueError as err: .....: print(err) .....: .....: time data '99/99/99' does not match format '%m/%d/%y' 

Si necesita buscar una cadena más larga para una fecha, puede usar expresiones regulares para buscar dígitos separados por barras diagonales:

 In [146]: import re In [152]: match = re.search(r'(\d+/\d+/\d+)','The date is 11/12/98') In [153]: match.group(1) Out[153]: '11/12/98' 

Por supuesto, las fechas no válidas también coincidirán con:

 In [154]: match = re.search(r'(\d+/\d+/\d+)','The date is 99/99/99') In [155]: match.group(1) Out[155]: '99/99/99' 

Para comprobar que match.group(1) devuelve una cadena de fecha válida, podría analizarla utilizando datetime.datetime.strptime como se muestra arriba.

Encuentro que la siguiente RE funciona bien para la fecha en el siguiente formato;

  1. 14-11-2017
  2. 14.11.2017
  3. 14 | 11 | 2017

Puede aceptar año desde 2000-2099.

Por favor, no olvide agregar $ al final, si no, acepte 14-11-201 o 20177

 date="13-11-2017" x=re.search("^([1-9] |1[0-9]| 2[0-9]|3[0-1])(.|-)([1-9] |1[0-2])(.|-|)20[0-9][0-9]$",date) x.group() 

salida = ’13 -11-2017 ‘

Usando esta expresión regular, puede validar diferentes tipos de muestras de Fecha / Hora, solo se necesita un pequeño cambio.

^\d\d\d\d/(0?[1-9]|1[0-2])/(0?[1-9]|[12][0-9]|3[01]) (00|[0-9]|1[0-9]|2[0-3]):([0-9]|[0-5][0-9]):([0-9]|[0-5][0-9])$ -> valide esto: 2018/7/12 13:00:00

Para tu formato cad lo cambias a:

^(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[0-2])/\d\d$ -> Valida esto: 12/12/98.

Bueno, a mi entender, simplemente para hacer coincidir este formato en una cadena dada, prefiero esta expresión regular:

 pattern='[0-9|/]+' 

Para emparejar el formato de una manera más estricta, los siguientes trabajos:

 pattern='(?:[0-9]{2}/){2}[0-9]{2}' 

Personalmente, no puedo estar de acuerdo con la respuesta de unutbu, ya que a veces usamos expresiones regulares para “encontrar” y “extraer”, no solo “validar”.