2008-12-16 38 views
7

Soy consciente de que Python 3 corrige un montón de cuestiones UTF, no obstante soy capaz de usar Python 3, estoy usando 2.5.1UTF expresiones regulares en Python

Estoy tratando de regex un documento, pero el documento tiene guiones UTF en lugar de -. Python no puede hacer coincidir estos y si los pongo en la expresión regular arroja un tambaleante.

¿Cómo puedo forzar a Python a usar una cadena UTF o de alguna manera hacer coincidir un carácter como ese?

Gracias por su ayuda

+0

Eliminé los duplicados. No estoy seguro de por qué mi navegador envió 3 a la vez ... – Teifion

+0

Me parece que Python tenía un soporte muy bueno (no perfecto) pero muy bueno para cadenas en varias codificaciones (ej. Utf-8 (es * codificación *)) como ell como Unicode (Unicode no es una codificación) cadenas mucho antes de que Python 3 no culpe al lenguaje; solo haz una pregunta si no sabes cómo hacerlo ... – jfs

+0

Quería evitar que alguien me contara sobre Python 3 o preguntar si lo estaba usando. Python 2.5 sigue siendo un lenguaje maravilloso y lo prefiero sobre PHP – Teifion

Respuesta

4

Después de una prueba rápida y visita a PEP 0264: Defining Python Source Code Encodings, veo que tenga que decirle a Python todo el archivo es UTF -8 codificado al agregar agregando un comentario como este a la primera línea.

# encoding: utf-8 

Aquí está el archivo de prueba que creó y dirigió en Python 2.5.1/OS X 10.5.6

# encoding: utf-8 
import re 
x = re.compile("–") 
print x.search("xxx–x").start() 
7

Tienes que escapar del personaje en cuestión (-) y poner una u en frente de la cadena literal para que sea una cadena Unicode.

Así, por ejemplo, esto:

re.compile("–") 

se convierte en esto:

re.compile(u"\u2013") 
+0

Estaba poniendo una r antes de la cadena para la cadena sin procesar – Teifion

+0

También puede agregar 'ur' antes de la cadena para que esté en bruto _y_ Unicode. – rlafuente

3

No utilizar UTF-8 en una expresión regular. UTF-8 es una codificación multibyte donde algunos puntos de código Unicode están codificados por 2 o más bytes. Puedes hacer coincidir partes de tu cuerda que no planeaste unir. En su lugar, use cadenas unicode como se sugiere.

Cuestiones relacionadas