regex - 至少一个特定字符的正则表达式
问题描述
我有一个模式如下
pattern='(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[-+*/%])(?=.*[.?,:;-~]).*';
我想要的至少是:一个大写值一个小写值一个数字值最后两个括号中的每个字符之一。
但是,我的正则表达式不能正常工作(即使我至少有一个,它也会显示一个错误)
这种模式的正确形式是什么?
解决方案
您可以使用对比原理,即:
^ # start of the string
(?=[^A-Z]*[A-Z]) # not A-Z, zero or more times, A-Z once
(?=[^a-z]*[a-z]) # ... same with lower case letters ...
(?=\D*\d) # ... digits ...
(?=[^-+*/%]*[-+*/%]) # ... first "special character" ...
(?=[^-~.?,:;]*[-~.?,:;]) # ... second "special character" ...
.+ # one character or more
$ # end of the string
方法如下:
(?=[^characters I do not want]*[^characters I do want])
# ^^^ - negation
请参阅regex101.com 上的演示(那里的换行符仅供在线测试人员使用)。
推荐阅读
- python - 构建后以编程方式更改地图框图形的平移/缩放
- javascript - 如何在调整元素大小之前确定元素的原生宽度?
- flutter - 值更改时提供程序不更新自定义小部件
- azure-devops - 如何将 azure board 与 azure repos 集成?
- sql - SQL Server - 选择进入导致错误
- python - Django 上下文处理器不从 shell 渲染
- group-by - 获取每个部门最高工资的员工详细信息
- machine-learning - 具有两个文本特征的逻辑回归
- flutter - Flutter 对齐堆栈上相同位置的两个小部件
- svn - Subversion工作副本:如何让它记住文件时间