2016-05-07 10 views
0

パイソン2.7Pythonの正規表現re.search(R "([AZ] + [AZ] + [0-9] +)"、パスワード)

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

しかしとき

>>>password="Fa11con77YES" 
>>>re.search(r"([a-z]+[A-Z]+[0-9]+)", password) 
>>> 
一致させることができ

は一致しません。なぜ、誰かが私を助けることができますか?ありがとう!

+3

あなたは何をしようとしていますか?今すぐあなたの正規表現は、小文字の直後に大文字と数字の直後にチェックされます。 – Amber

+0

あなたは 're.search'と' re.match'の間で混乱していると思います。 –

答えて

1

パスワードは、少なくともそれぞれの一方(上下、番号)を持っていることを確認しようとしているなら、あなたは別のチェックを実行する必要があります。

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

基本正規表現を順に固有のものです。これを行うためのもう一つの方法は、(あなたの正規表現の風味がそれをサポートしている場合)、先読みを使用することです:

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

しかし、これは単なる独立小切手のそれぞれを行うよりも少ない効率的な場合があります。

0

に変更し、それを:

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

それは同様の文字の順序と一致する必要があります。

0

正規表現では、1文字以上の小文字の後に1文字以上の大文字と1文字以上の数字が続く文字列が記述されています。

最初のケース(ULFFunH8ni)では、 "unH8"が見つかりました。

2番目のケース(Fa11con77YES)では、一致する部分文字列はありません。

文字列全体が正規表現と一致するようにするには、re.match()を使用する必要があります。

関連する問題