2016-05-07 13 views
0

Python 2,7Python regulären Ausdruck re.search (R "([az] + [AZ] + [0-9] +)", Passwort)

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

kann aber als

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

kann nicht übereinstimmen, ich weiß nicht warum, kann mir jemand helfen? Vielen Dank!

+3

Was möchten Sie tun? Gerade jetzt prüft Ihre Regex nach Kleinbuchstaben, gefolgt von Großbuchstaben, unmittelbar gefolgt von Ziffern. – Amber

+0

Ich denke, du bist verwirrt zwischen 're.search' und' re.match'. –

Antwort

1

Wenn Sie versuchen, um sicherzustellen, dass das Passwort mindestens eine von jeder hat (untere, obere, Zahl), dann müssen Sie separate Kontrollen tun:

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)) 

Grund Regexes sind auftragsspezifisch. Ein anderer Weg, dies zu tun, wäre Lookaheads zu verwenden (wenn Ihr regex Geschmack unterstützt):

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

Dies kann jedoch weniger effizient sein als nur jede der Kontrollen unabhängig machen.

0

Ändern Sie es an:

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

sollte es auch die Reihenfolge der Zeichen übereinstimmen.

0

Ihr regulärer Ausdruck beschreibt Zeichenfolgen mit mindestens 1 Kleinbuchstaben, gefolgt von 1 oder mehreren Großbuchstaben gefolgt von einer oder mehreren Ziffern.

Im ersten Fall (ULFFunH8ni) findet es "unH8";

Im zweiten Fall (Fa11con77YES) gibt es keinen übereinstimmenden Teilstring.

Wenn die gesamte Zeichenfolge mit dem regulären Ausdruck übereinstimmen soll, verwenden Sie re.match();

Verwandte Themen