regex, buscar cadenas con comillas
Oswaldo Hernández
listas en soft-com.es
Mar Dic 11 15:49:55 CET 2007
Chema Cortes escribió:
> El 10/12/07, Oswaldo Hernández <listas en soft-com.es> escribió:
>
>> Lo que pretendia era hacer un replace unicamente en las cadenas que van entre comillas dejando el
>> resto intacto. El split me parecio una buena idea ya que con esa expresion me devuelve todas las
>> partes y en su orden.
>> Se que el regex tiene un 'replace', pero como no soy muy ducho con el, y corria un poquito de prisa
>> al final quedo asi:
>>
>> def FiltraSQL(self, sql):
>> # ajustes en sentencia sql antes de su proceso
>>
>> # dividir sentencia en fragmentos para modificar los entrecomillados y volver a montar
>> partes = re.split("('.*?')|(\".*?\")", sql)
>> # eliminar Nones
>> while None in partes:
>> partes.remove(None)
>>
>> for n,p in zip(range(len(partes)),partes):
>> if p[0] == "'" or p[0] == '"':
>> partes[n] = p.replace("*", "%")
>>
>> return "".join(partes)
>>
>> Imagino que se podrá optimizar bastante, pero de momento me ha valido.
>
> Si ya funciona, no lo arregles; pero si quieres ver cómo se puede hacer mejor:
>
> def repl(m):
> return m.group(0).replace("*","%")
>
> sql=re.sub("('.*?')|(\".*?\")", repl, sql)
Ufff, una verdadera pasada lo que se puede hacer en dos lineas de codigo. ;)
Gracias.
--
*****************************************
Oswaldo Hernández
oswaldo (@) soft-com (.) es
*****************************************
_______________________________________________
Lista de correo Python-es
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes
Más información sobre la lista de distribución Python-es