* is 0+, + is 1+, ? is 0 or 1, {m,n} is a range. Add ? after a quantifier to make it lazy.
Goal
Show greedy vs lazy on a tiny tag-like string, and a digit count.
import re
print(re.findall(r"\d+", "u12 u9 u3"))
print(re.findall(r"\d{4}", "2026-01-12"))import re
print(re.findall(r"a+", "aaabaa"))
print(re.findall(r"a+?", "aaabaa"))import re
text = "<b>Nairobi</b> and <b>Kisumu</b>"
print(re.findall(r"<b>.*</b>", text))
print(re.findall(r"<b>.*?</b>", text))import re
print(bool(re.fullmatch(r"07\d{8}", "0712345678")))
print(bool(re.fullmatch(r"07\d{8}", "071234567")))