python regex-findall-und multiline
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', '']
Warum gibt es einen Unterschied zwischen der Verwendung von MULTILINE-flag in findall?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beim aufrufen der
findall()
Methode, die auf ein regex-Objekt, der zweite parameter ist nicht dieflags
argument (denn das hat schon beim kompilieren der regex), aber diepos
argument, erzählt die regex-engine an welcher Stelle in der Zeichenfolge zum starten passenden.re.MULTILINE
ist nur ein integer (das passiert zu sein8
).Sehen die docs.
Weil die
findall
Methode der kompilierten Objektptrn
nicht nehmen Sie die MULTILINE-parameter. Es dauert eineposition
argument.Siehe hier: http://docs.python.org/library/re.html#re.RegexObject.findall
Die MULTILINE-Bezeichner wird nur verwendet, wenn Sie anrufen
re.compile()
Die daraus resultierendenptrn
Objekt schon 'weiß', dass esMULTILINE
.