python regex findall et multilignes
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', '']
Pourquoi est-il une différence entre l'utilisation de plusieurs lignes de drapeau dans findall?
OriginalL'auteur kmad | 2012-08-14
Vous devez vous connecter pour publier un commentaire.
Lors de l'appel de la
findall()
méthode sur un objet regex, le second paramètre n'est pas leflags
argument (parce que cela a déjà été utilisée lors de la compilation de l'expression rationnelle), mais lepos
argument, en disant le moteur d'expressions régulières à quel stade de la chaîne de début correspondant.re.MULTILINE
est juste un entier (qui se trouve être8
).Voir les docs.
jamais pris la peine de vérifier si re.MULTILINE était un objet ou int
OriginalL'auteur Tim Pietzcker
Parce que le
findall
méthode de l'objet compiléptrn
ne pas prendre le MULTILIGNE paramètre. Il faut unposition
argument.Voir ici: http://docs.python.org/library/re.html#re.RegexObject.findall
Le MULTILIGNE spécificateur est utilisé uniquement lorsque vous appelez
re.compile()
L'résultantptrn
objet "sait" déjà que c'estMULTILINE
.OriginalL'auteur alan