Sustitucion de caracteres

nocreyente nocreyentes en terra.es
Jue Ene 26 21:36:38 CET 2006


Buenas:

No se si será la mejor forma, no he hecho pruebas de estres, pero hay 
tienes otra forma de hacerlo:

import re, sys
#A la cadena le falra algun caracter chungo que no pille bien de tu mail
regMalos = re.compile(r"(\?|\$|\#|\"|\'|`|\(|\)|\[|\]|\||\{|\}|~|\ 
|;|=|&|\\|!)")
cadena = sys.argv[1]
copia = "" #Voy a copiar a una nueva cadena el resultado
inicio = 0
for match in regMalos.finditer(cadena): #Busco todas la incidencias 
chungas
     copia = copia + cadena[inicio:match.start()] + "\\" + 
match.groups()[0]     #copio lo bueno y lo malo arreglao ¿deberia usar 
"%s\\%s"?
     inicio = match.end()      #Marcamos el nuevo comienzo de una cadena 
buena
copia = copia + cadena[inicio:]   #Los caracteres buenos

print copia

No se si funcionara bien del todo, porque no le hice muchas pruebas, 
las justas para ver que no habia errores de bulto. Supongo que sera mas 
rapida, porque solo se hace copiado de la cadena cuando hay caracteres 
raros.

Espero que te sirva de algo, aunque solo sea para que las expresiones 
regulares (aunque son un infierno al principio) son muy utiles.

Un saludo:

Javi

El 26/01/2006, a las 12:19, Israel Gutierrez escribió:

> Buenas
>
> Tengo una pequeña función que trata de substituir determinados 
> caracteres
> contenidos en una tupla para escaparlos, de manera que si el carácter 
> es a
> quede como \\a, pero es muy lenta y no se me ocurre como hacerlo más 
> rápido.
>
> ¿Se os ocurre alguna idea?
>
> ---------------------------------------------------------
>     def path2shell(self,cadena):
>         """
>             Convierte un path de un fichero a un path de fichero de 
> shell
>             espacios son \
>             comilla simple \'
>             comilla doble \"
>         """
>         
> todelete=('?','$','#','"',"'",'`','(',')','[',']','|','{','}','~',' ',
> ';','=','&','\\','!','¡')
>         for a in cadena:
>             if a in todelete:
>                 restexto =restexto+'\\'+a
>             else:
>                 restexto=restexto+a
>         return restexto
> -- 
>
> Un saludo.
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es




Más información sobre la lista de distribución Python-es