18

As I know, re proposes the following boundary matches.

  • ^ matches at the beginning of a line.
  • $ matches at the end of a line.
  • \A matches the beginning of the input.
  • \Z matches the end of the input.

Can you give me a concret example showing a real difference between between ^, $ and \A, \Z ?

1 Answers1

22

The difference only becomes apparent when you use the re.M or re.MULTILINE multiline flag:

>>> 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

where ^ matched at the start of a line (following a newline). $ matches at the end of a line:

>>> 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

From the documentation:

re.M
re.MULTILINE

When specified, the pattern character '^' matches at the beginning of the string and at the beginning of each line (immediately following each newline); and the pattern character '$' matches at the end of the string and at the end of each line (immediately preceding each newline). By default, '^' matches only at the beginning of the string, and '$' only at the end of the string and immediately before the newline (if any) at the end of the string.

\A always matches at the start of the string regardless, \Z always at the end.

Martijn Pieters
  • 1,048,767
  • 296
  • 4,058
  • 3,343