考虑字符串:
text = "aaAA23 aAAA32 32AeeeB fjdSkjj839jl2lkjj"
pat = ?
result = re.findall(pat, text)
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种模式,它将给出以下结果:
["aaAA23", "aAAA32", "32Aeee", "dSkjj8"]
Run Code Online (Sandbox Code Playgroud)
我以一种天真的方式这样做:
pat = "[a-z]+[A-Z]+[0-9]+|[A-Z]+[a-z]+[0-9]+|[a-z]+[0-9]+[A-Z]+|[A-Z]+[0-9]+[a-z]+|[0-9]+[a-z]+[A-Z]+|[0-9]+[A-Z]+[a-z]+"
Run Code Online (Sandbox Code Playgroud)
这是行不通的,因为它会产生:
["aaAA23", "aAAA32", "32Aeee", "Skjj839"]
Run Code Online (Sandbox Code Playgroud)
怎么做?
使用与每个所需字符类型匹配的前瞻。
pat = r'(?=.{0,5}[a-z])(?=.{0,5}[A-Z])(?=.{0,5}\d)[a-zA-Z\d]{6}'
Run Code Online (Sandbox Code Playgroud)