2012-08-22 6 views
6

Estoy notando un comportamiento extraño en la biblioteca Regex de Python, y no estoy seguro de si estoy haciendo algo mal.Error en Python Regex? (re.sub con re.MULTILINE)

Si ejecuto una expresión regular en ella usando re.sub(), con re.MULTILINE. Parece que solo reemplaza las primeras ocurrencias. Reemplaza todas las ocurrencias si desactivo re.MULTILINE, uso re.subn(..., count = 0, flags = re.MULTILINE), o compile la expresión regular usando re.compile(..., re.MULTILINE).

Estoy ejecutando Python 2.7 en Ubuntu 12.04.

He publicado un ejemplo al azar en:

  • Pastebin.com - Salida desde la terminal
  • codepad - Script, confirmando el comportamiento (a excepción de re.subn(), que es diferente de 2.5)

¿Alguien puede confirmar/denegar este comportamiento en su máquina?

EDIT: Realizado Debo seguir adelante y publicar esto en el rastreador de errores de Python. EDIT 2: Edición informó: http://bugs.python.org/msg168909

Respuesta

16

Uso

re.sub(pattern, replace, text, flags=re.MULTILINE) 

en lugar de

re.sub(pattern, replace, text, re.MULTILINE) 

lo que equivale a

re.sub(pattern, replace, text, count=re.MULTILINE) 

que es un error en el código.

Ver re.sub()

+0

Ah, bueno, eso lo explica jaja. Cerré el problema. ¡Gracias! – eacousineau

+0

Estaba usando 're.I' sin' flags = 'durante bastante tiempo y no sabía esto. Los doctores no te advierten sobre tal comportamiento, que creo que es un grave error. Ni siquiera recuerdo haber visto a alguien usando 'flags' y' count' explícitamente. – minerals

+0

@minerals: si hace clic en el enlace en la respuesta; debería ver la firma de función 're.sub (pattern, repl, string, count = 0, flags = 0)' y los documentos explican qué significa el parámetro 'count'. – jfs