Peut-être,
^(?!.*[a-z]{3})(?=.*[\d])(?=.*[A-Z])(?=.*[a-z]{2})(?=.*[@#$])[\w\d@#$]{6,12}$
pourrait fonctionner alors.
(?!.*[a-z]{3})
signifie que plus de trois minuscules consécutives ne sont pas autorisées.
Test
import re
char = 'Massas23#'
if re.search(r"^(?!.*[a-z]{3})(?=.*[\d])(?=.*[A-Z])(?=.*[a-z]{2})(?=.*[@#$])[\w\d@#$]{6,12}$", char):
print("match")
else:
print("Not Match")
Si vous souhaitez simplifier/modifier/explorer l'expression, elle a été expliquée dans le panneau supérieur droit de la page regex101.com . Si vous le souhaitez, vous pouvez également regarder en ce lien comment il se comporterait par rapport à certains échantillons.
Circuit RegEx
jex.im visualise les expressions régulières :
Je suppose que nous n'essayions pas de correspondre MAsSa23#
si vous souhaitez le faire,
^(?!.*[a-z]{3})(?=.*[\d])(?=.*[A-Z])(?=.*[a-z]{1,2})(?=.*[@#$])[\w\d@#$]{6,12}$
le ferait.