Donner du crédit pour La réponse de @Ruzihm puisque certaines parties de ma réponse découlent de la sienne.
Aperçu rapide
Un rapide tour d'horizon des différences :
-
re.match
est ancré au départ ^pattern
- S'assure que la chaîne commence par le motif
-
re.fullmatch
est ancré au début et à la fin du motif ^pattern$
- S'assure que la chaîne complète correspond au modèle (peut être particulièrement utile avec les alternances comme décrit aquí )
-
re.search
n'est pas ancré pattern
- S'assure que la chaîne de caractères contient le motif
Une comparaison plus approfondie de re.match
vs re.search
peuvent être trouvés aquí
Avec des exemples :
aa # string
a|aa # regex
re.match: a
re.search: a
re.fullmatch: aa
ab # string
^a # regex
re.match: a
re.search: a
re.fullmatch: # None (no match)
Alors qu'en est-il \A
y \Z
des ancres ?
En documentation déclare ce qui suit :
Python propose deux opérations primitives différentes basées sur les caractères réguliers. régulières : re.match()
ne vérifie qu'une seule correspondance la chaîne, tandis que re.search()
vérifie s'il y a une correspondance n'importe où dans le (c'est ce que Perl fait par défaut).
Et dans le Pattern.fullmatch
il est dit dans la section :
Si la chaîne entière correspond à cette expression régulière, elle renvoie un objet match correspondant.
Et, comme initialement trouvé et cité par Ruzihm dans sa réponse :
Notez cependant qu'en mode MULTILINE, match() ne correspond qu'à l'élément début de la chaîne, alors qu'en utilisant search() avec une expression régulière régulière commençant par ^
correspondra au début de chaque ligne.
>>> re.match('X', 'A\nB\nX', re.MULTILINE) # No match
>>> re.search('^X', 'A\nB\nX', re.MULTILINE) # Match
<re.Match object; span=(4, 5), match='X'>
\A^A
B
X$\Z
# re.match('X', s) no match
# re.search('^X', s) no match
# ------------------------------------------
# and the string above when re.MULTILINE is enabled effectively becomes
\A^A$
^B$
^C$\Z
# re.match('X', s, re.MULTILINE) no match
# re.search('^X', s, re.MULTILINE) match X
En ce qui concerne \A
y \Z
les performances ne sont pas différentes pour re.MULTILINE
depuis \A
y \Z
sont effectivement les seuls ^
y $
dans toute la chaîne.
Donc, en utilisant \A
y \Z
avec l'une des trois méthodes donne les mêmes résultats.
Réponse (ancres de ligne vs ancres de chaîne)
Ce que cela me dit, c'est que re.match
y re.fullmatch
ne correspondent pas ancres de ligne ^
y $
respectivement, mais qu'ils correspondent plutôt à ancres de chaîne \A
y \Z
respectivement.