El día 5 de abril de 2012 17:20, Jose Caballero <jcaballero....@gmail.com> escribió:
> El problema viene cuando quiero que la coma sea tomada literalmente. > En este caso "a,b,c" tendria que convertirse, por ejemplo, en ["a,b" , "c"] > > Una posible solucion es 'escapear' la coma que debe ser tomada literalmente. > "a\,b,c" -> ["a,b", "c"] > > Bien. > Pero y si en el caso anterior realmente la coma es caracter separador, y la > barra es parte del primer substring? > Es decir, que "a\,b,c" quiero que se convierta en ["a\", "b", "c"] > > Tendria que escapear tambien la barra? No se convierte esto en un problema > ciclico? Si tenemos en cuenta que las comas literales suelen venir acompañadas de un espacio, se podía pensar en una solución con expresiones regulares: import re t=re.compile(",(?![ ])") print t.split("a, b,c") # >>> ['a, b', 'c'] Si se quiere complicar más, por ejemplo para que también considere las comas decimales como "comas literales": t=re.compile("(?<!\d),(?![ ])|(?<=\d),(?![ \d])") t.split("suma parcial: 2,5,suma total: 12,5") #>>> ['suma parcial: 2,5', 'suma total: 12,5'] En modo "verbose": t=re.compile("""(?x) #activa modo verbose #patrón 1 (?<!\d) #La coma no va precedida por un dígito , (?!\s) #...ni la sigue un espacio |#patrón 2 (?<=\d) #A la coma le precede un dígito , (?![ \d]) #...pero no le sigue ni dígitos ni espacio """) -- Hyperreals *R: http://ch3m4.org/blog Quarks, bits y otras criaturas infinitesimales _______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/