re.S: indica la acción a extenderse en toda la cadena, incluyendo '\ n', el '\ n' se integra en una cadena de caracteres ordinarios
caso
import re
a = '''asdfhellopass:
123
worldaf
'''
b = re.findall('hello(.*?)world',a)
c = re.findall('hello(.*?)world',a,re.S)
print 'b is ' , b
print 'c is ' , c
Los resultados son los siguientes:
b is []
c is ['pass:\n\t123\n\t']
análisis
hola (. *?) mundo representa todos los no-coincidencia entre la palabra y hola carácter '\ n'
cuando no esté en uso re.S, línea por línea, para que coincida con ella (en '\ n' para distinguir cada línea), b no es re.S utilizando la cadena primero emparejado 'asdfhellopass:' y, a continuación, volver a coincidir con la cadena '123' hasta el final, así que no hay ajustes indicados coincidan
cuando se utiliza re.S, ya que coincide con la cadena 'asdfhellopass: \ n \ t123 \ n \ twordaf 'es como el resultado
esta vez se puede sentir dudas. además de no coincidir con' todo el solo carácter \ n 'fuera de él? ¿Por qué resultado hay '\ n', porque esta vez re.S '\ n' se ha convertido en un carácter ordinario, ya no es un salto de línea