16

Python 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()正規表現オブジェクトでメソッドを呼び出す場合、2番目のパラメーターはflags引数ではなく(正規表現のコンパイル時にすでに使用されているため)pos、文字列のどの時点で一致を開始するかを正規表現エンジンに指示する引数です。

re.MULTILINEは単なる整数です(たまたま8)。

ドキュメントを参照してください。

于 2012-08-14T18:47:51.367 に答える
9

findallコンパイルされたオブジェクトのメソッドはptrnMULTILINEパラメーターを受け取らないためです。position議論が必要です。

ここを参照してください:http://docs.python.org/library/re.html#re.RegexObject.findall

MULTILINE指定子は、呼び出したときにのみ使用されますre.compile()。結果のptrnオブジェクトは、それがであることがすでに「認識」されていますMULTILINE

于 2012-08-14T18:49:14.190 に答える