python regex findall y multiline

python 2.6.8

s= ''' foo bar baz ''' >>>re.findall(r'^\S*',s,re.MULTILINE) ['', 'foo', 'bar', 'baz', ''] >>>ptrn = re.compile(r'^\S*',re.MULTILINE) >>>ptrn.findall(s) ['', 'foo', 'bar', 'baz', ''] >>>ptrn.findall(s,re.MULTILINE) ['baz', ''] 

¿Por qué hay una diferencia entre el uso de la bandera MULTILINE en findall?

Cuando se llama al método findall() en un objeto de expresión regular, el segundo parámetro no es el argumento flags (porque ya se usó al comstackr la expresión regular) sino el argumento pos , que indica al motor de expresión regular en qué punto de la cadena debe comenzar a coincidir .

re.MULTILINE es solo un número entero (que pasa a ser 8 ).

Ver los documentos .

Debido a que el método findall del objeto comstackdo ptrn no toma el parámetro MULTILINE. Se necesita un argumento de position .

Consulte aquí: http://docs.python.org/library/re.html#re.RegexObject.findall

El especificador MULTILINE solo se usa cuando se llama re.compile() El objeto ptrn resultante ya “sabe” que es MULTILINE .