16

蟒蛇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', '']

为什么在 findall 中使用 MULTILINE 标志有区别?

4

2 回答 2

29

在正则表达式对象上调用findall()方法时,第二个参数不是实参flags(因为在编译正则表达式时已经使用过),而是实参pos,告诉正则表达式引擎在字符串中的哪个点开始匹配。

re.MULTILINE只是一个整数(恰好是8)。

请参阅文档

于 2012-08-14T18:47:51.367 回答
9

因为findall编译对象的方法ptrn不带 MULTILINE 参数。这需要一个position论据。

见这里:http ://docs.python.org/library/re.html#re.RegexObject.findall

MULTILINE 说明符仅在您调用re.compile()结果ptrn对象已经“知道”它是时使用MULTILINE

于 2012-08-14T18:49:14.190 回答