Python2.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中使用多行标志有区别?
Tags:
因为编译对象的
findall
方法不接受多行参数。它接受一个position
参数。请看这里:http://docs.python.org/library/re.html#re.RegexObject.findall
多行说明符仅在调用
re.compile()
结果ptrn
对象已经“知道”它是MULTILINE
时使用。在对正则表达式对象调用
findall()
方法时,第二个参数不是flags
参数(因为在编译正则表达式时已经使用了该参数),而是pos
参数,告诉正则表达式引擎在字符串的哪个点开始匹配。re.MULTILINE
只是一个整数(正好是8
)。见the docs。
相关问题 更多 >
编程相关推荐