[Python] re e output non previsto risolto!

Adriano Barbieri adrianobarb a yahoo.it
Lun 17 Giu 2013 14:56:54 CEST


Grazie Alessandro,
Voglio solo dire che regexp ne ho scritte a migliaia per editare almeno 3 
dizionari per lo screen reader nvda :)
Cercami su san google!
Ci ho anche scritto 4 articoli al riguardo.
Non credi che mi sia fatta un po' d'esperienza?
Le regexp di Python sono diverse lo so... però reagiscono allo stesso modo 
con i metacaratteri le classi e i gruppi e operatore...
Te e Marco insistete a dire che il mio approccio potrebbe generare l'errore 
AttributeError, ma non è vero.
Io sarò cieco, ma Alessandro, gli esempi da te postati non sono la stessa 
cosa che ho adottato io. ;)
Ripercorrendo i tuoi esempi...
Se in:# data corretta
m=re.search('\d\d/\d\d/\d\d\d\d', '15/10/1962')
m.group(0)
Tornerà '15/10/1962'
E andrebbe bene.
Se in: #data in mezzo a del testo
m=re.search('\d\d/\d\d/\d\d\d\d', 'ambaraba 10/06/2009')
m.group(0)
Tornerà '10/06/2009'
E a me non va bene.
Se in:#stringa vuota
m=re.search('\d\d/\d\d/\d\d\d\d', '')
m.group(0)
Tornerà l'errore AttributeError... e a me non va bene!:)
Il trucco sta nel usare un gruppo col pattern e un operatore OR... la barra 
verticale.
In questo modo, con una stringa vuota:
m=re.search('(\d\d/\d\d/\d\d\d\d|)', '')
m.group((0)
Tornerà una stringa vuota... nessun errore!
se in:
m=re.search('(\d\d/\d\d/\d\d\d\d)', '')
m.group(0)
Tornerà il famoso AttributeError!
Solo avendo eliminato l'operatore OR.
Vedi, col mio approccio non ho necessità di gestire un possibile error con 
try.. except AttributeError:
Questa regexp fa esattamente ciò che serve a me:
1 ritornare in m la data o una stringa vuota... comodo per un if m:
2 Non tornare le date in mezzo a del testo.
3 Non generare mai errore.
Io non so cosapotrei volere di più :)
Provate a far generare un errore alla mia regexp e fatemelo sapere... non si 
sa mai
Al limite mi cospargerò il capo di cenere! :))

Adriano Barbieri

----- Original Message ----- 
From: "Alessandro Dentella" <sandro a e-den.it>
To: "Discussioni generali sul linguaggio Python" <python a lists.python.it>
Sent: Monday, June 17, 2013 9:40 AM
Subject: Re: [Python] re e output non previsto risolto!


> 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
> *:-)
>
>
>
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python
> 



Maggiori informazioni sulla lista Python