Lazy / Non-Greedy Quantifier in PY
Demonstrate lazy quantifiers `+?` by matching the SHORTEST HTML-like tag rather than the longest greedy span.
Try it in the PY tester →Pattern
regexPY
<.+?> (flags: g)Python (re) code
pyPython
import re
pattern = re.compile(r"<.+?>")
input_text = "<b>bold</b> and <i>italic</i>"
for m in pattern.finditer(input_text):
print(m.group(0))Stdlib `re` module — no third-party dependency. Works on Python 3.6+.
How the pattern works
<.+?> matches an opening `<`, then ONE OR MORE characters (`.+`), then the next `>`. The `?` after `+` makes the quantifier lazy — it stops at the first `>` it sees, instead of the greedy default that would consume everything up to the LAST `>` in the string.
Examples
Input
<b>bold</b> and <i>italic</i>Matches
<b></b><i></i>
Input
<div class="foo">x</div>Matches
<div class="foo"></div>
Input
no tagsNo match
—