快刀斩乱麻,regexp filter高效筛选不合格密码用户

快刀斩乱麻,regexp

为了实现一个正则表达式(regexp)过滤器来筛选不合格的密码,我们首先需要定义什么是不合格的密码。以下是一些常见的密码不合格条件:
1. 密码长度不足。 2. 密码中不包含大写字母。 3. 密码中不包含小写字母。 4. 密码中不包含数字。 5. 密码中不包含特殊字符。
以下是一个Python代码示例,它使用正则表达式来检查密码是否符合上述条件,并筛选出不符合条件的用户:
```python import re
# 定义一个函数来检查密码是否合格 def is_password_valid(password): # 正则表达式,检查密码是否包含至少一个小写字母、一个大写字母、一个数字和一个特殊字符 # 并且密码长度至少为8个字符 pattern = re.compile(r'^(?=.[a-z])(?=.[A-Z])(?=.d)(?=.[@$!%?&])[A-Za-zd@$!%?&]{8,}$') return pattern.match(password) is not None
# 假设有一个用户列表和他们的密码 users = [ {'username': 'user1', 'password': 'Password1'}, {'username': 'user2', 'password': 'pass'}, {'username': 'user3', 'password': 'PASSWORD123'}, {'username': 'user4', 'password': 'Password!'},

相关内容:

网友求助SOS:如何将密码中至少4个连续相同数字的用户筛选出来?


A1:B7区域为数据源。A列为用户名,B列为密码。要求在D列筛选出不合格密码的用户,出现至少连续4个一样数字的为不合格的密码。例如密码“71170000”中有4个连续的0,所以为不合格密码,它所对应的用户名为“C”。




我们使用两大函数利器:REGEXP函数与FILTER函数,双剑合璧,快刀斩乱麻,快速解决问题。



第一步:判断数字是否至少4个连续重复


使用REGEXP正则表达式函数:

=REGEXP(B2:B7,".")


.:匹配任意单个字符。


我们想象的应该是会返回B2:B7区域每个单元格全部可能的任意单个字符。


例如:

B2="81222283" 返回 {"8","1","2","2","2","2","8","3"}

B3="11121314" 返回 {"1","1","1","2","1","3","1","4"}


但实际上

REGEXP函数对B2:B7区域中每个单元格独立处理,但仅返回每个单元格的第一个匹配结果,其余的会视觉省略掉。也就是说REGEXP第一参数若是对区域进行处理,默认采用 “单匹配优先” 逻辑,避免多维数组混乱。


例如 B2="81222283" 返回 "8",B3="11121314" 返回 "1"


此特点是 Excel/WPS 的函数设计特性,与正则表达式语法无关。其实作用一样,只是视觉输出不同。



继续完善正则表达式:

=REGEXP(B2:B7,"(.)")


( ):捕获组,将匹配的字符保存起来,以便后续引用。


作用:匹配并“记住”密码中的任意一个字符(如第一个字符)。



继续完善正则表达式:

=REGEXP(B2:B7,"(.)1{3}")


1:反向引用,表示引用第一个捕获组,即 (.) 匹配到的字符。

作用:确保下一个字符与第一个字符相同。例如,如果第一个字符是"2",则1要求下一个字符也是"2"。


{3}:量词,表示前面的元素,即1 必须连续出现3次。

作用:结合1,表示“相同的字符再重复3次”。所以1{3}等同于“相同字符连续出现3次”。


(.)1{3} 组合效果:

匹配一个字符后跟着相同字符连续3次,总连续4个相同字符。


例如:

匹配"2222"(4个2)、"0000"(4个0)等。

在密码"81222283"中,它会匹配到"2222"部分



继续完善公式:

=REGEXP(B2:B7,"(.)1{3}",1)


REGEXP函数省略第3参数默认的是“提取”模式,将第3参数修改为“1”,REGEXP函数由默认的“提取”模式转换为了“判断”模式。


即密码有连续4位相同时,返回逻辑值TRUE,否则返回逻辑值FALSE。




第二步:筛选符合条件的用户


运用FILTER筛选函数:

=FILTER(A2:A7,REGEXP(B2:B7,"(.)1{3}",1))


Excel的FILTER函数,用于根据条件筛选数据。


生成FILTER函数所需的“筛选条件”数组

如果密码不合格(如"81222283"中的"2222"),对应位置为TRUE,FILTER会保留该用户名。


如果密码合格(如"11121314"只有连续3个"1"),对应位置为FALSE,FILTER会忽略该用户名。


发布于 2025-06-17 08:18
收藏
1
上一篇:湖北政务网用户手册,登录密码修改详尽流程指引 下一篇:新手理财攻略,现在流行的理财方式大盘点