正则表达式,Python合并

时间:2019-01-13 09:43:04

标签: python regex

#! python
#STRONG PASSWORD PROGRAM
import re, pyperclip


pw_compare_lower=re.compile(r'[a-z]')
pw_compare_upper=re.compile(r'[A-Z]')
pw_compare_digit=re.compile(r'[0-9]')
gr=str(input())
def Checker(gr):
    if len(gr)<8:
        return 0
    if pw_compare_lower.search(gr)==None:
        return 0
    if pw_compare_upper.search(gr)==None:
        return 0
    if pw_compare_digit.search(gr)==None:
        return 0
    return 1
if (Checker(gr))==1:
    print("Strong Password")
elif (Checker(gr))==0:
    print("Weak Password")

有没有一种方法可以在一行中编写三个pw_compare_digit,pw_compare_upper,pw_compare_lower函数以形成一个正则表达式。

条件如下:

强密码定义为位于 至少八个字符,包含大写和小写字符,并且至少一位数字

2 个答案:

答案 0 :(得分:2)

是的,先行

^(?=[^a-z\n]*[a-z])(?=[^A-Z\n]*[A-Z])(?=[^\d]*\d).{8,}$

请参见a demo on regex101.com


然后,您所有的代码都可以缩短为

import re, pyperclip

rx = re.compile(r'^(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z]).{8,}$')
if rx.match(your_string_here):
    # pass

答案 1 :(得分:1)

我想指出的是,您也可以不使用正则表达式也可以实现此目标,以下代码将检查gr的长度是否至少为八个字符,是否包含大写和小写字符以及至少一位数字:

def Checker(gr):
    return len(gr)>=8 and any([i.islower() for i in gr]) and any([i.isupper() for i in gr]) and any([i.isdigit() for i in gr])

请注意,如果要使用TrueFalse,则此返回01只需将整个返回值放入int()中。