[Python] Espressioni regolari

Daniele Varrazzo piro a develer.com
Mer 25 Maggio 2011 16:16:01 CEST


On Wed, 25 May 2011 14:57:17 +0100 (BST), Walter Valenti
<waltervalenti a yahoo.it> wrote:
> Ho delle stringe, dove i caratteri che non sono le lettere maiuscole e
> minuscole e i numeri,
> vengono sostituiti da "__codice.ascii__" ovvero:
> doppio underscore + codice ascii + doppio underscore.
> 
> 
> Per decodificarli pensavo di usare le espressioni regolari.
> Qualcosa del tipo
> p=re.compile('__\d\d__|__\d\d\d__')
> il problema è che quando voglio eseguire la "sub", non so come fare a
> passargli il numero (cod_ascii)
> 
> Idee ??

La funzione re.sub (o il metodo sub dell'oggetto Pattern) supportano una
funzione come argomento per il "replace": la funzione prende in input
l'oggetto match e deve restituire una stringa che viene sostituita alla
parte matchata::

    >>> rex = re.compile(r'__(\d+)__')
    >>> rex.sub(lambda m: chr(int(m.group(1))), 'un__65__ pr__79__va')    
                                                                          
   
    'unA prOva'

Comunque, OT, se devi proprio inventarti un formato di codifica, prendi in
considerazione l'uso di un formato standard, tipo il percent encoding, che
è anche supportato dalla stdlib (vedi
http://docs.python.org/library/urllib.html#urllib.quote).

-- 
Daniele Varrazzo - Develer S.r.l. 
http://www.develer.com


Maggiori informazioni sulla lista Python