I like it! Here is a gotcha my students stumble on. I have not noticed it while skimming your book: ^ and $ do not have special priorities. To match alternatives, write ^(abc|def)$, not ^abc|def$
I do mention it in the book while discussing anchors (indicating alternatives have their own independent anchors) [0] and grouping [1].
I also discuss how `re.fullmatch` is useful, especially when constructing an alternation pattern from a list of terms. Easier to use fullmatch instead of manually adding a group and string anchors.
[0] https://learnbyexample.github.io/py_regular_expressions/alte...
[1] https://learnbyexample.github.io/py_regular_expressions/alte...