python - 正则表达式搜索以检查字符串中的多个条件
问题描述
我是使用 regex 和 Python 的新手,为了获得一些练习,我认为我应该编写一个程序来模拟用户名和密码的检查条件。我想要的密码要求是:
# 1. have one or more special characters
# 2. have one or more lowercase letters
# 3. have one or more uppercase letters
# 4. have one or more numbers
但是我想出的变量...
req_characters = r"([@#$%&*-_/\.!])+([a-z])+([A-Z])+([0-9])+"
和正则表达式搜索功能...
elif not re.search(req_characters, string):
print("Your password must contain at least one uppercase and one
lowercase letter, one number, and one special character.")
导致应该匹配的字符串,触发该 if 语句。具体来说,如果我输入字符串
#This_is_stuff0123
我得到了打印语句,所以正则表达式认为条件没有得到满足。但是,如果我输入字符串
##azAZ01
它匹配,这告诉我正则表达式只会按顺序排列那些字符类/组。我尝试了各种带括号的分组均无济于事,然后尝试按以下方式使用“或”,结果相同:
req_characters = r"([@#$%&*-_/\.!]|[a-z]|[A-Z]|[0-9]){6, 30}"
所以我想知道一个简单的解决方案可能是编辑当前的正则表达式来实现这个结果。
解决方案
我不太确定,如果这个表达式可能匹配您的所有输入,但是它可能会帮助您设计一个表达式来做到这一点:
^(?=.+[@#$%&*-_\/\.!])(?=.+[a-z])(?=.+[A-Z])(?=.+[0-9])[A-Za-z0-9@#$%&*-_\/\.!]{6,30}$
代码:
import re
string = 'A08a^&0azA'
# string = 'A08a^&0azAadA08a^&0azAadA08a^&0azAad'
matches = re.search(r'^((?=.+[@#$%&*-_\/\.!])(?=.+[a-z])(?=.+[A-Z])(?=.+[0-9])[A-Za-z0-9@#$%&*-_\/\.!]{6,30})$', string)
if matches:
print(matches.group(1)+ " is a match")
else:
print('Sorry! No matches! Something is not right! Call 911')
输出
A08a^&0azA is a match
图形
推荐阅读
- c# - Rider 中的 dotnet:无法解析符号“Microsoft”
- pandas - 将 astropy 表转换为 pandas DataFrame 到 hdf 文件时出错
- sql-server - 单节点 SQL-BDC 群集端点重新启动主机后不可用
- c# - 如何从用户那里获取数组并向他打印重复的数字以及重复的数字有多少?C#
- python - 从 Anaconda 提示符启动 Spyder
- vega - vega - 根据下拉列表选择包含标记大小的列
- c++ - 如何从两个不同的函数传递参数
- python - 如何在 tkinter 中不断跟踪 tree.selection?
- python - Snakemake 中通配符内的通配符
- git - VSCode 不提交修改后的文件夹,如何解决这个问题?