2012-04-02 24 views
8

Quiero coincidir con las fechas que tienen el siguiente formato:fechas de partidos usando Python expresiones regulares

2010-08-27, 2010/08/27

En este momento no soy muy particular acerca de la fecha siendo factible, pero solo que está en el formato correcto.

por favor, diga la expresión regular para esto.

Gracias

+0

Esto es bastante básico. ¿Has probado algo por tu cuenta? –

+2

¿Desea únicamente verificar el formato o convertirlo? Si también desea la conversión, eche un vistazo a 'time.strptime', que no necesita ninguna expresión regular. –

Respuesta

18

Usted puede utilizar el módulo de 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') 

de salida:

2010-08-27 00:00:00 
Traceback (most recent call last): 
    File "./x.py", line 6, in <module> 
    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' 

Así captura ValueError le dirá si las va de:

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

Para permitir varios formatos que podría o prueba para todas las posibilidades, o utilizar 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 
+0

quiero hacer coincidir las fechas del patrón DD/MM/YYYY, DD-MM-YYYY con la expresión Regular y sustituir tales cadenas con la cadena 'FECHA'. usando python – user1308308

+0

Bueno, podría probar nuevamente todas las variantes posibles en su función, o extraer los dígitos con una expresión regular. Actualizaré la respuesta. – hochl

2

Uso del módulo datetime. Aquí es una expresión regular para el bien del conocimiento a pesar de que no se debe utilizar:

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

Puede utilizar 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+)') 

actualizado expresión regular 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<sep>[-/])\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 
+0

Muchas gracias – user1308308

+0

bien, creo que la respuesta de Hochl es la mejor ya que usa 'datetime' que puede validar una fecha. Entonces, si quiere usar una expresión regular para hacer esto, es mejor usar esto provisto por jamylak: '" \ d {4} [- /] \ d {2} [- /] \ d {2} "' ya que también verifica que la longitud del año es de 4 caracteres y de día y mes es exactamente 2 caracteres. :) –

+0

por favor dígame cómo sustituir el nuevo patrón en cadenas coincidentes – user1308308

Cuestiones relacionadas