Hola, estoy escribiendo un programa regex para buscar un patrón Mmm dd hh:mm:ss en la oración dada. Por ejemplo, quiero identificar si un patrón como Mmm dd hh: mm: ss está presente en la oración dada (por ejemplo, 03 de agosto 50:42:08 es el momento optimista para comenzar el trabajo ) Revisé muchas preguntas de desbordamiento de pila que se incluyen en este tema. ¿Pero aún así no puedo determinar exactamente regex pattern (template) para identificar si Mmm dd hh:mm:ss está presente en la oración dada?

Editar 1:

Entonces, una vez que se identifica este patrón, ¿qué se debe hacer para agrupar esas oraciones que coinciden con el patrón en un grupo y las oraciones que no coinciden con el patrón en otro grupo?

El código desarrollado hasta ahora está abajo:

regexp = re.compile('[a-zA-Z]+(?=\s\d)\s\d+\s\d+:\d+:\d+')
if regexp.search('we shall meet on Jun 26 10:45:09'):
    print('matched')

Salida:

>>> matched
-1
Steffi Keran Rani J 30 oct. 2017 a las 13:56

4 respuestas

Creo que esta expresión regular coincidirá con el formato en notación de 24h:

^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(0?[1-9]|[12][0-9]|3[01])\s([0-1]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$

  • Desde el comienzo de la cadena ^
  • Coincide con los meses (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)
  • Coincidir con un espacio en blanco \s
  • Coincide con los días (0?[1-9]|[12][0-9]|3[01])
  • Coincidir con un espacio en blanco \s
  • Coincide con las horas en anotaciones de 24 horas ([0-1]?[0-9]|2[0-3])
  • Coincide con un punto y coma :
  • Coincide con los minutos [0-5][0-9]
  • Coincide con un punto y coma :
  • Coincide con los segundos [0-5][0-9]
  • Coincide con el final de la línea $

Nota : esta nota se ocupa de casos extremos como el 31 de junio 23:45:09

1
The fourth bird 30 oct. 2017 a las 11:50

Dada una cadena, puedes probar esto:

import re
s = "We will meet on Jun 10 4:12:40" 
date = re.findall('[a-zA-Z]+(?=\s\d)\s\d+\s\d+:\d+:\d+', s)[0]

Salida:

'Jun 10 4:12:40'
1
Ajax1234 30 oct. 2017 a las 11:07

Esta expresión regular seguirá ese patrón, pero no validará que los meses sean correctos.

^[A-Z][a-z]{2} \d\d \d\d:\d\d:\d\d$
1
Juan 30 oct. 2017 a las 11:01

A continuación, la expresión regular validará también el mes:

(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \d\d \d\d:\d\d:\d\d
1
Yulian Matev 30 oct. 2017 a las 11:27