[Python] re e output non previsto risolto!
Alessandro Dentella
sandro a e-den.it
Lun 17 Giu 2013 09:40:05 CEST
On Sun, Jun 16, 2013 at 11:21:13PM +0200, Adriano Barbieri wrote:
>
>
> No Marco,
> Ci sono campi vuoti e con valori tutt'altro che formato data, cognome, nome,
> comune_nascita, provincia_nascita, telefono1, telefono2, data_assunzione,
> scadenza_contratto, bla bla bla...
>
> Grazie Marco, tranquillo, l'errore è dovuto a quei due apici dopo l'operatore
> 'or' (barra verticale) che prevede appunto una data|niente data o niente se il
> match è False
credo che tu abbia risolto il problema senza comprendere le regexp, né il
suggerimento di Marco.
Forse ti aiuta aprire l'interprete interattivo e provare a giocare con le
regexp. Secondo me stai facendo confusione fra l'oggetto match, quello che
viene rappresentato da una stringa del tipo "<_sre.SRE_Match object at
0x05096860>" con il gruppo 0: m.group(0) che è la parte che viene
"matchata".
In [1]: import re
In [2]: m=re.search('\d\d/\d\d/\d\d\d\d', '02/06/2008')
In [3]: m
Out[3]: <_sre.SRE_Match at 0xa1ba608>
Questo è il modo in cui python ti rappresenta l'oggetto match, l'oggetto che
ha il metodo group che usi quando esegui m.group(0)
In [4]: m.group(0)
Out[4]: '02/06/2008'
In [5]: m1=re.search('\d\d/\d\d/\d\d\d\d', '02/06/20')
In [6]: m1
m1 è None, in quanto il pattern non corrisponde.
In [7]: m1.group(0)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-7-884727d1fc08> in <module>()
----> 1 m1.group(0)
AttributeError: 'NoneType' object has no attribute 'group'
Ed ecco l'errore AttributeError che ti dice marco.
Se ora prendi una strnga lunga che contiene il match oltre ad altre cose
vedi che il match resta sempre e solo la data
In [8]: re.search('\d\d/\d\d/\d\d\d\d', 'un di era il 02/06/2008')
Out[8]: <_sre.SRE_Match at 0xa21eb48>
In [9]: _.group(0)
Out[9]: '02/06/2008'
NOTA: '_' per ipytho è l'ultimo valore restituito
il tuo approccio era "ma è sempre funzioanto", quando Marco cercava di farti
ragionare sul fatto che m.group(0) non ha alcun significato in quel contesto
e se non serve lo togli. m.group(0) restituisce il match ma non lo assegni a
nulla quindi non te ne fai nulla!!!
A te 'eseercizio di aggiungere la '|' per vedere cosa cambia.
sandro
*:-)
Maggiori informazioni sulla lista
Python