re.match
est ancré au début de la chaîne. Cela n'a rien à voir avec les nouvelles lignes, donc ce n'est pas la même chose que d'utiliser^
dans le motif.
Comme documentation re.match dit la :
Si zéro ou plusieurs caractères au
début de la chaîne correspondent au modèle d'expression régulière, renvoyez unMatchObject
instance . RevenirNone
si la chaîne ne correspond pas au modèle; notez que ceci est différent d'une correspondance de longueur nulle.
Remarque: Si vous souhaitez rechercher une correspondance n'importe où dans la chaîne, utilisez search()
plutôt.
re.search
recherche la chaîne entière, comme le dit la documentation :
Parcourez la chaîne à la recherche d'un emplacement où le modèle d'expression régulière produit une correspondance et renvoyez une MatchObject
instance correspondante . Retourne None
si aucune position dans la chaîne ne correspond au motif; notez que cela diffère de la recherche d'une correspondance de longueur nulle à un moment donné de la chaîne.
Donc, si vous devez faire correspondre au début de la chaîne, ou faire correspondre l'utilisation de la chaîne entière match
. C'est plus rapide. Sinon, utilisez search
.
La documentation a une section spécifique pour match
vssearch
qui couvre également les chaînes multilignes:
Python propose deux opérations primitives différentes basées sur des expressions régulières: match
vérifie une correspondance
uniquement au début de la chaîne, tandis que search
vérifie une correspondance
n'importe où dans la chaîne (c'est ce que Perl fait par défaut).
Notez que cela match
peut différer de search
même lorsque vous utilisez une expression régulière commençant par '^'
: '^'
ne correspond qu'au début de la chaîne, ou en
MULTILINE
mode également immédiatement après une nouvelle ligne. L' match
opération « » réussit que si le motif correspond au début de la chaîne,
quel que soit le mode, ou à la position de départ donnée par l' pos
argument facultatif , que la nouvelle ligne la précède ou non.
Maintenant, assez parlé. Il est temps de voir un exemple de code:
# example code:
string_with_newlines = """something
someotherthing"""
import re
print re.match('some', string_with_newlines) # matches
print re.match('someother',
string_with_newlines) # won't match
print re.match('^someother', string_with_newlines,
re.MULTILINE) # also won't match
print re.search('someother',
string_with_newlines) # finds something
print re.search('^someother', string_with_newlines,
re.MULTILINE) # also finds something
m = re.compile('thing$', re.MULTILINE)
print m.match(string_with_newlines) # no match
print m.match(string_with_newlines, pos=4) # matches
print m.search(string_with_newlines,
re.MULTILINE) # also matches