Saltar al contenido

Python regex para que coincida con las fechas

Solución:

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

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)

A continuación, puede acceder al día, mes y año (y hora, minutos y segundos) como atributos del datetime.datetime objeto:

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 representa una fecha válida, puede usar un try..except cuadra. Las fechas no válidas generarán 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 inválidas también coincidirán:

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 eso match.group(1) devuelve una cadena de fecha válida, luego puede analizarla usando datetime.datetime.strptime como se muestra arriba.

Encuentro que el RE a continuación funciona bien para la fecha en el siguiente formato;

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

Puede aceptar el año 2000-2099

No olvide agregar $ al final, si no acepta 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”

Con esta expresión regular, puede validar diferentes tipos de muestras de fecha / hora, solo se necesita un pequeño cambio.

^dddd/(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])$ -> validar esto: 2018/7/12 13:00:00

para su formato, puede cambiarlo a:

^(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[0-2])/dd$ -> valida esto: 11/12/98

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *