我正在尝试查找与字母和数字的组合匹配的正则表达式,每种类型必须至少出现一次。我发现可以使用以下方法实现:
([a-z]+\d+|\d+[a-z]+)[a-z\d]*
但是,我希望整个字符串至少为3个字符,最多为5个字符。有办法吗?
谢谢!
答案 0 :(得分:4)
我的猜测是,也许
^(?!.*[a-z]{2}|.*[0-9]{2})[a-z0-9]{3,5}$
或
^(?!.*(?:[a-z]{2}|[0-9]{2}))[a-z0-9]{3,5}$
如果不允许两个连续的字母或数字,则可能是需要的。
如果我们至少要有一个字母和数字:
^(?=.*[a-z])(?=.*[0-9])[a-z0-9]{3,5}$
可能是一个选择。
如果允许3到5次字母或数字:
^[a-z0-9]{3,5}$
可能工作正常。
import re
string = '''
aaa
aaa1
aaab1
a1
a1b2
a1b2c3
a1b2c3d4
'''
expression = r'^(?=.*[a-z])(?=.*[0-9])[a-z0-9]{3,5}$'
print(re.findall(expression, string, re.M))
['aaa1', 'aaab1', 'a1b2']
如果您希望简化/修改/探索表达式,请在regex101.com的右上角进行说明。如果愿意,您还可以在this link中查看它如何与某些示例输入匹配。
jex.im可视化正则表达式: