2012-08-14 12 views
8

Python 2.6.8pitón de expresiones regulares y de varias líneas findall

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?

Respuesta

15

Al llamar al método findall() en un objeto de expresiones regulares, el segundo parámetro no es el argumento flags (debido a que ya ha sido empleada en la compilación la expresión regular), pero el argumento pos, diciéndole al motor de expresiones regulares en qué punto de la cadena de comenzar a emparejar

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

Ver the docs.

+2

Buena pena. Usted me ganó por 30 segundos y ya tenía 4 votos positivos. Nunca seré FGITW :-) – alan

+0

nunca me molesté en comprobar si re.MULTILINE era un objeto o int. – kmad

Cuestiones relacionadas