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
.