REGEX – Diferencias entre `^`, `$` y `\ A`,` \ Z`

Como yo sé, re propone las siguientes coincidencias de límites.

  • ^ coincidencias al principio de una línea.
  • $ coincide al final de una línea.
  • \A coincide con el comienzo de la entrada.
  • \Z coincide con el final de la entrada.

¿Me puede dar un ejemplo concreto que muestre una diferencia real entre ^ , $ y \A , \Z ?

La diferencia solo se hace evidente cuando se utiliza el re.M re.MULTILINE re.M o re.MULTILINE :

 >>> re.search(r'^word', 'Line one\nword on line two\n', flags=re.M) <_sre.SRE_Match object at 0x10124f578> >>> re.search(r'\Aword', 'Line one\nword on line two\n', flags=re.M) is None True 

donde ^ coincidió al comienzo de una línea (siguiendo una nueva línea). $ coincide al final de una línea:

 >>> re.search(r'word$', 'Line one word\nLine two\n', flags=re.M) <_sre.SRE_Match object at 0x10123e1d0> >>> re.search(r'word\Z', 'Line one word\nLine two\n', flags=re.M) is None True 

De la documentación:

re.M
re.MULTILINE

Cuando se especifica, el carácter de patrón '^' coincide al principio de la cadena y al principio de cada línea (inmediatamente después de cada nueva línea); y el carácter de patrón '$' coincide al final de la cadena y al final de cada línea (inmediatamente antes de cada nueva línea). De forma predeterminada, '^' coincide solo al principio de la cadena, y '$' solo al final de la cadena e inmediatamente antes de la nueva línea (si existe) al final de la cadena.

\A siempre coincide al comienzo de la cadena independientemente, \Z siempre al final.