Lessons · Regex · $ and \Z: two different ends
Two different ends
$ matches at the end of the string AND just before a newline at the end of it. \Z matches only the very end.
Hone is a place to practise programming. This is one of its lessons, written out in full and free to read without an account.
What it is for
A value read from a file usually still has its newline attached, and a $-anchored check waves it through.
How to think about it
Searching text: $ is friendly and right. Validating a value: \Z, or strip the input first and say so.
Worked example
re.search(r'\w+$', 'end\n').group()$ allowed the trailing newline.
re.search(r'\w+\Z', 'end\n')\Z did not.
bool(re.search(r'^[a-z]+$', 'ada\n'))So a username check that looks watertight accepts a newline.
Your turn
Say whether each of 'end' and 'end\n' ends there, with no allowance for a newline.
[bool(re.search(r'\w+', s)) for s in ('end', 'end\n')]Test a pattern against real text
The trap
Every part of that last pattern is right and the check still passes something the field should never hold.
Now you try
Next in Regex
Practise $ and \Z: two different ends on HoneA question on it now, a coding challenge where there is one, and it is remembered for review. Free, no email needed.