2012/7/28 Daniele Varrazzo <p...@develer.com> > On 2012-07-28 19:49, Giorgio Zoppi wrote: > >> Marco compariamo >> >> RegExp: >> import re >> >> date = "01/02/1988" >> checkdate ="^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- >> /.](19|20)\d\d" >> obj = re.compile(checkdate) >> if (re.match(date)): >> print 'Valid date' >> > > Ti dice anche se un anno è bisestile? > > > Datetime >> from datetime import datetime >> date = '10/12/1977' >> input = date.replace("/","") >> result = None >> format = ['%d%m%Y'] >> try: >> result = datetime.strptime(input, format) >> except: >> pass >> >> if (result): >> print "Validate" >> >> >> Il secondo e' piu pythonico...ma lungo. Hai altre opzioni? >> > > Basta toglierci tutta la roba che non serve. Che poi che vuol dire, più un > pezzo di codice è corto e meglio è? L'estetica del perl? > > from datetime import datetime > input = '10/12/1977' > try: > result = datetime.strptime(input, '%d/%m/%Y') > except ValueError: > result = None > > (sebbene l'aggettivo "Pythonico" non sia esattamente ben definito, il tuo > esempio *veramente* non lo era..)
totalmente d'accordo, e non sono nemmeno sostituibili. Semplicemente quella con le RegExp è sbagliata, l'altra no, perché? import re re.match( "^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d", "31/02/1988") # nota bene, il 31 febbraio probabilmente non esiste In questo caso con la regexp puoi magari avvicinarti alla correttezza, puoi farle estremamente sofisticate e riconoscere i mesi da 30/31/28 giorni e arrivare a considerare gli anni bisestili ottenendo qualcosa tipo: ^(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$ [via <http://regexadvice.com/blogs/mash/archive/2004/04/02/300.aspx>] ma si tratterebbe probabilmente di masturbazione più che programmazione :P [scusate ho letto ora "ti dice anche se l'anno è bisestile, ma ormai avevo scritto! :P] > -- > Daniele Varrazzo - Develer S.r.l. > http://www.develer.com > > ______________________________**_________________ > Python mailing list > Python@lists.python.it > http://lists.python.it/**mailman/listinfo/python<http://lists.python.it/mailman/listinfo/python> >
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python