Greedy matching makes a regular-expression quantifier such as * or + consume as many characters as possible while still allowing the pattern to match. With <.+>, the dot spans multiple placeholders and stops at the final >, not the first. section 17.1.1
Matching angle-bracket placeholders
Given `The quick <adjective> <noun> jumps ...`, `re.search('(<.+>)', text)` returns the entire span from `<adjective>` through the final `>`. Use `<.+?>` to stop at `<adjective>`, or `<[^<>]+>` to exclude both angle brackets from the contents and preserve balanced pairs. section 17.1.1
Control the match when a greedy quantifier crosses the intended delimiter:
- Append `?` to make `+` or `*` non-greedy, selecting the shortest possible match. section 17.1.1
- Prefer a negated character class such as `[^<>]+` when the contents must not contain either delimiter. section 17.1.1

