[pyar] Trabado con una re

Jose Jachuf jjachuf en gmail.com
Lun Ago 15 12:33:42 ART 2011


El día 15 de agosto de 2011 11:57, Matías Bellone
<matiasbellone en gmail.com> escribió:
> Tenés que modificar tu expresión regular para que sólo matchee la
> comilla al final de la cadena sólo si el siguiente caracter no es otra
> comilla. Dado que todas las cadenas están entre comillas, la expresión
> regular más simple es:
>
>  ('(?:[^']|'')+')
>
> Eso es:
> - una comilla
> - seguida por una o más de alguna de las siguientes
>   - cualquier cosa que no sea una comilla
>   - dos comillas seguidas
> - una comilla
>
>>>> a = "'O''HIGGINS GRAL. BERNARDO','8871','8899','8870','8898','ST','S','17459','8870','8871','8898','8899','0105000'"
>>>> d = re.compile("('(?:[^']|'')+')")
>>>> c = d.findall(a)
>>>> c
> ["'O''HIGGINS GRAL. BERNARDO'", "'8871'", "'8899'", "'8870'",
> "'8898'", "'ST'", "'S'", "'17459'", "'8870'", "'8871'", "'8898'",
> "'8899'", "'0105000'"]
>
> Si no querés las comillas en las cadenas resultantes, también se puede
> hacer corriendo un poco los paréntesis:
>
>>>> d = re.compile("'((?:[^']|'')+)'")
>>>> c = d.findall(a)
>>>> c
> ["O''HIGGINS GRAL. BERNARDO", '8871', '8899', '8870', '8898', 'ST',
> 'S', '17459', '8870', '8871', '8898', '8899', '0105000']
>
> Saludos,
> Toote

Muchas Gracias Toote

Funciona bien, salvo para cuando hay un valor numérico (sin comillas,
887), no lo encuentra.

'O''HIGGINS (GRAL.) BERNARDO', 887,
'8899','8870','8898','ST','S','17459','8870','8871','8898','8899','0105000'

Jose



More information about the pyar mailing list