2012-04-22 12 views
7

Tengo la siguiente cadena y estoy tratando de encontrar la mejor práctica para desenterrarla.Uso de decode() frente a regex para deshacer esta cadena

La solución tiene que ser algo flexible ya que recibo esta entrada de una API y no puedo estar absolutamente seguro de que la estructura de caracteres actual (\n en lugar de \r) sea siempre la misma.

'"If it ain\'t broke, don\'t fix it." \nWent in for a detailed car wash.\nThe attendants raved-up my engine when taking the car into the tunnel. NOTE: my car is...'

Esta expresión regular parece que debería funcionar:

text_excerpt = re.sub(r'[\s"\\]', ' ', raw_text_excerpt).strip() 

he leído aso que decode() podría funcionar (y habría una solución mejor en general).

raw_text_excerpt.decode('string_unescape') 

Probé algo en ese sentido y no funcionó. ¿Alguna sugerencia? ¿Es la expresión regular mejor aquí?

+1

Parece una buena solución. Podrías usar lstrip en lugar de strip, pero es un pequeño detalle. – Wes

+0

Gracias Wes. Supongo que quería mantenerlo genérico con tira, pero probablemente no sea necesario. ¿Alguna idea de cómo podría lograr la misma salida con decodificación en lugar de la expresión regular? – Ben

+1

Parece que no existe un códec como el que intentó utilizar: http://docs.python.org/library/codecs.html#codec-base-classes – Wes

Respuesta

16

El códec que estás buscando es string-escape:

>>> print "\\'".decode("string-escape") 
' 

No estoy seguro de qué versión se añaden en ella, aunque ... podría ser una versión más antigua que está utilizando que no lo hace tenerlo. Estoy corriendo:

Python 2.6.6 (r266:84292, Mar 25 2011, 19:36:32) 
[GCC 4.5.2] on linux2