Tengo el siguiente código para que coincida con las fechas

import re
date_reg_exp2 = re.compile(r'\d{2}([-/.])(\d{2}|[a-zA-Z]{3})\1(\d{4}|\d{2})|\w{3}\s\d{2}[,.]\s\d{4}')
matches_list = date_reg_exp2.findall("23-SEP-2015 and 23-09-2015 and 23-09-15 and Sep 23, 2015")
print matches_list

La salida que espero es

["23-SEP-2015","23-09-2015","23-09-15","Sep 23, 2015"]

Lo que estoy obteniendo es:

[('-', 'SEP', '2015'), ('-', '09', '2015'), ('-', '09', '15'), ('', '', '')]

Compruebe el enlace para regex aquí.

5
Kartheek Palepu 11 dic. 2015 a las 13:01

3 respuestas

La mejor respuesta

El problema que tiene es que re.findall vuelve capturado textos solo excluyendo el Grupo 0 (todo el partido). Como necesita toda la coincidencia (Grupo 0), solo necesita usar { {X1}} y toma el valor group():

matches_list = [x.group() for x in date_reg_exp2.finditer("23-SEP-2015 and 23-09-2015 and 23-09-15 and Sep 23, 2015")]

Consulte demostración IDEONE

re.findall(pattern, string, flags=0)
Devuelva todas las coincidencias no superpuestas de patrón en una cadena, como una lista de cadenas ... Si uno o más grupos están presentes en el patrón, devuelva una lista de grupos; esta será una lista de tuplas si el patrón tiene más de un grupo.

re.finditer(pattern, string, flags=0)
Devuelva un iterator obteniendo MatchObject instancias sobre todas las coincidencias no superpuestas para el patrón RE en cuerda.

2
Wiktor Stribiżew 11 dic. 2015 a las 10:17

Probar esto

# The first (\d{2}-([A-Z]{3}|\d{2})-(\d{4}|\d{2})) group tries to match the first three types of dates
# rest will match the last type
dates = "23-SEP-2015 and 23-09-2015 and 23-09-15 and Sep 23, 2015"
for x in re.finditer('((\d{2}-([A-Z]{3}|\d{2})-(\d{4}|\d{2}))|([a-zA-Z]{3}\s\d{1,2},\s\d{4}))', dates):
    print x.group(1)
0
saikumarm 11 dic. 2015 a las 10:25

Podrías probar esta expresión regular

date_reg_exp2 = re.compile(r'(\d{2}(/|-|\.)\w{3}(/|-|\.)\d{4})|([a-zA-Z]{3}\s\d{2}(,|-|\.|,)?\s\d{4})|(\d{2}(/|-|\.)\d{2}(/|-|\.)\d+)')

Luego use re.finditer()

for m in re.finditer(date_reg_exp2,"23-SEP-2015 and 23-09-2015 and 23-09-15 and Sep 23, 2015"):
print m.group()

La salida será

23-SEP-2015
23-09-2015
23-09-15
23 de sep. De 2015

2
Rohan Amrute 11 dic. 2015 a las 10:19
34220726