Pregunta

El Python docs decir:

re.MULTILINE:Cuando se especifica, el patrón de carácter '^' coincide con el comienzo de la cadena y en el principio de cada línea (inmediatamente después de cada salto de línea)...De forma predeterminada, '^' coincide sólo en el principio de la cadena...

Entonces, ¿qué está pasando cuando me sale el siguiente resultado inesperado?

>>> import re
>>> s = """// The quick brown fox.
... // Jumped over the lazy dog."""
>>> re.sub('^//', '', s, re.MULTILINE)
' The quick brown fox.\n// Jumped over the lazy dog.'
¿Fue útil?

Solución

Mira la definición de re.sub:

sub(pattern, repl, string[, count])

El 4 de argumento es el número, usted está utilizando re.MULTILINE (8) como el conde, no como una bandera.

Usted tiene que compilar el regex si desea utilizar banderas.

re.sub(re.compile('^//', re.MULTILINE), '', s)

Un flags argumento fue añadida en Python 2.7, por lo que la definición completa es ahora:

re.sub(pattern, repl, string[, count, flags])

Lo que significa que:

re.sub('^//', '', s, flags=re.MULTILINE)

obras.

Otros consejos

re.sub('(?m)^//', '', s)

La definición completa de re.sub es:

re.sub(pattern, repl, string[, count, flags])

Lo que significa que si usted le dice a Python lo que los parámetros son, entonces usted puede pasar flags sin pasar count:

re.sub('^//', '', s, flags=re.MULTILINE)

o, de forma más concisa:

re.sub('^//', '', s, flags=re.M)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top