Python 2.7

>>>import re
>>>password="ULFFunH8ni"
>>>re.search(r"([a-z]+[A-Z]+[0-9]+)", password)
<_sre.SRE_Match object at 0x7ff5ffd075d0>

Puede coincidir pero cuando

>>>password="Fa11con77YES"
>>>re.search(r"([a-z]+[A-Z]+[0-9]+)", password)
>>>

No puede igualar, no sé por qué, ¿alguien puede ayudarme? ¡Gracias!

0
Hao Ban 7 may. 2016 a las 20:12

3 respuestas

La mejor respuesta

Si está tratando de asegurarse de que la contraseña tenga al menos uno de cada uno (inferior, superior, número), debe realizar verificaciones separadas:

low = re.search(r"[a-z]", password)
up = re.search(r"[A-Z]", password)
num = re.search(r"[0-9]", password)
has_all = all((low, up, num))

Las expresiones regulares básicas son específicas del pedido. Otra forma de hacer esto sería usar lookaheads (si su sabor regex lo admite):

re.search(r"(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])")

Sin embargo, esto puede ser menos eficiente que simplemente hacer cada una de las verificaciones de forma independiente.

3
zondo 8 may. 2016 a las 12:39

Su expresión regular describe cadenas que tienen 1 o más caracteres en minúscula seguidos de 1 o más caracteres en mayúscula seguidos de uno o más dígitos.

En el primer caso (ULFFunH8ni) encuentra "unH8";

En el segundo caso (Fa11con77YES) no hay ninguna subcadena que coincida.

Si desea que toda la cadena coincida con la expresión regular, debe usar re.match ();

0
Luís Pedro Gonçalves 7 may. 2016 a las 17:17

Cámbielo a:

re.search(r"([a-z]+[0-9]+[A-Z]+)", password)

También debe coincidir con el orden del personaje.

0
piyush121 7 may. 2016 a las 17:16