[Python] string replace

Daniele Varrazzo piro a develer.com
Gio 6 Ott 2011 14:01:22 CEST


On Thu, 6 Oct 2011 13:35:42 +0200, "roberto.preziusi a gmail.com"
<roberto.preziusi a gmail.com> wrote:
> Ciao,
> mi sono bloccato con una regular expression su python.
> Sto cercando di mettere i due punti ad un mac address e togliere quello
> finale, ma non riesco a far funzionare questa regexp che su sed va cosė
> bene:
> 
> *da terminale:*
> 
> echo "00A1B2AABBCC" | sed 's/\(..\)/\1:/g;s/:$//'
> 
> *con python :*
> 
>>>> mac = "00A0BCAABBCC"
>>>> mac.replace("\(..\)","\1:")
> '00A0BCAABBCC'
>>>> mac.replace("..","\1:")
> '00A0BCAABBCC'
>>>> mac.replace("..",":")
> '00A0BCAABBCC'
>>>> mac.replace("\.\.",":")
> '00A0BCAABBCC'
> 
> dove sbaglio ?

Nell'assumere che string.replace capisca le espressioni regolari :)

>>> import re
>>> re.sub(r"(..(?!$))", r"\1:", "00A1B2AABBCC")
'00:A1:B2:AA:BB:CC'

La parolaccia (?!$) č un negative look-ahead, serve a non far matchare
l'ultima coppia di caratteri. Se vuoi una regexp che non dica parolacce
puoi usare

>>> re.sub(r"(..)", r"\1:", "00A1B2AABBCC")[:-1]


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


Maggiori informazioni sulla lista Python