python regex findall和multilin

2024-09-27 19:30:49 发布

您现在位置:Python中文网/ 问答频道 /正文

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: refoo标志barbazmultilinecompile区别
2条回答

因为编译对象的findall方法不接受多行参数。它接受一个position参数。

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

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

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

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

the docs

相关问题 更多 >

    热门问题