匹配特定长度的字母和数字组合的字符串

3

我有一个问题,无法解决:

我只能接受一个字符串,如果它由数字和字母构成,并且必须至少包含其中的一种;并且它必须是6-8个字符长。该字符串只能是一个单词。

第一部分没问题,虽然我不确定是否要使用match函数:

re.match('([a-zA-Z]+[0-9]+)', string)

但我不知道如何指定长度,它应该是数字和字母加起来的长度。下面的代码行不通,我猜也不应该这样做:

re.match('([a-zA-Z]+[0-9]+){6,8}', string)

感谢您的帮助。
1个回答

7

试试这个:

^(?=.*\d)(?=.*[a-zA-Z])[a-zA-Z\d]{6,8}$

说明:
^              //The Start of the string
(?=.*\d)       //(?= ) is a look around. Meaning it
               //checks that the case is matched, but
               //doesn't capture anything
               //In this case, it's looking for any
               //chars followed by a digit.
(?=.*[a-zA-Z]) //any chars followed by a char.
[a-zA-Z\d]{6,8}//6-8 digits or chars.
$              //The end of the string.

这个方法很有效,而且解释来得正是时候,让我避免了过度使用脑力去琢磨它。现在一切都清晰了,非常感谢! - EnemyMaker
我一直在思考,我有另一个问题:可能出现只有第一个字符是数字,而其余都是字母的情况,或者反过来。在这种情况下,你的代码将不接受该字符串,但实际上它是正确的。是否有办法解决这个问题?我现在不需要,只是感兴趣而已。 - EnemyMaker
它将接受该字符串,因为 * 匹配 0 或更多个字符。 - Jacob Eggers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接