感谢阿努巴瓦,前瞻是正确的选择。
\b(?=[a-z]+[A-Z]+|[A-Z]+[a-z]+)[a-zA-Z]{8,20}\b
Run Code Online (Sandbox Code Playgroud)
前瞻可确保匹配中至少有一个大写字母和小写字母(无论顺序如何)。这将匹配长度为 8-20 个字符且至少包含 1 个大写字母和至少 1 个小写字母的整个单词。
^(?=[a-z]+[A-Z]+|[A-Z]+[a-z]+)[a-zA-Z]{8,20}$
Run Code Online (Sandbox Code Playgroud)
将锚定到字符串的开头和结尾,因此仅匹配单个单词。
您可以在此处查看它的实际效果http://regex101.com/r/uE5lT4/4
编辑:如果唯一的大写字母是最后一个字母,则第一个版本与单词不匹配。