我正在尝试编写一个验证用户名的正则表达式,其中一个要求是,如果字符串中有数字,则数字必须在字母之后,并且第一个数字不能为零。由于某种原因,我无法使它使包含一组以零开头的数字的字符串无效
username_pattern = r'^[a-z]{3}[a-z]*([1-9]*|[1-9]*[0-9]*)'
if not re.fullmatch(username_pattern, test_username):
raise ValueError('username may have numbers but they must be after all the letters and may not being with 0')
我期望像“abc123”这样的东西能工作,但“abc0123”失败了,它们都能工作。
1条答案
按热度按时间wrrgggsh1#
您可以使用
r'^[a-z]{3,}([1-9]+[0-9]*)?'
代替。[a-z]{3,}
将至少匹配a-z
3次,这是您当前使用的[a-z]{3}[a-z]*
的较短版本。([1-9]+[0-9]*)
将确保至少有一个来自1-9
的字符在那里(+
意味着至少有一个字符应当匹配),后面跟着任意数目的0-9
字符。1.使用
?
将数字组设置为可选您可以尝试上面的正则表达式here。
这里有个简单的例子显示了不同的用户名-
输出: