is_email(text) using re.fullmatch with the practical pattern: one or more word chars/dots/hyphens/plus signs, @, domain labels, and a 2+ letter TLD. Perfect RFC compliance is not the goal — anchoring with fullmatch (vs match/search) is.is_email('dev+test@data-vix.io')True
Plus addressing and hyphenated domains pass.
is_email('bad@@x.com')False
Double @ fails the pattern.
r'[\w.+-]+@[\w-]+(\.[\w-]+)*\.[A-Za-z]{2,}'.
fullmatch demands the entire string conforms.