re.S:表示将作用扩展到整个字符串,包括 ' ',将 ' ' 变成普通字符整合到字符串中
案例
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
运行结果如下:
b is []
c is ['pass:
123
']
分析
hello(.*?)world表示匹配hello和word之间的所有非'
'的字符
当不使用re.S时,它一行一行去匹配(以'
'来区分每一行),b没有使用re.S则先匹配字符串'asdfhellopass:',然后在重新匹配字符串'123'直至结束,所以没有匹配到符合的语句
当使用re.S时,它匹配的字符串为'asdfhellopass:
123
wordaf'所以为如上结果
这时候你可能感到疑问 . 不是匹配除'
'外的所有单字符吗?为什么结果中还有'
',因为这时候'
'已经被re.S变成普通的字符,不再是换行符