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