正则表达式,Python中的合并[重复]

Posted

技术标签:

【中文标题】正则表达式,Python中的合并[重复]【英文标题】:Regular Expressions, consolidation in Python [duplicate] 【发布时间】:2019-06-07 14:56:32 【问题描述】:
#! 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 函数以形成一个正则表达式。

条件如下:

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

【问题讨论】:

【参考方案1】:

是的,带有前瞻

^(?=[^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

【讨论】:

【参考方案2】:

我要注意的是,你也可以不用正则表达式来实现这一点,下面的代码将检查 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()

【讨论】:

以上是关于正则表达式,Python中的合并[重复]的主要内容,如果未能解决你的问题,请参考以下文章

python使用正则表达式去除句子中的重复词

python正则表达式中的匹配括号[重复]

用Python中的正则表达式匹配输入[重复]

如何在python中的正则表达式中获取组[重复]

正则表达式使用 Python 从 HTML 中的 href 属性中提取 URL [重复]

Python-正则表达式1