编写正则匹配用户名函数遇报错:multiple repeat at position 9 求助
正则表达式匹配用户名报错:multiple repeat at position 9
错误原因
你的正则表达式"[A-Z]^{1}[a-zA-Z0-9]+[0-9]$"存在两个问题:
- 锚点位置错误:
^是正则里的行起始锚点,你把它放在[A-Z]后面,导致正则引擎误把^当成了需要被重复限定的字符(前面的{1}是重复限定符),直接触发了"multiple repeat"解析错误。 - 冗余语法:
{1}完全多余,正则中单个字符默认就匹配1次,不需要额外声明。
另外你的代码还漏了import re,没导入模块的话运行还会报NameError。
修复方案
修正正则表达式,调整锚点位置,同时补全代码缺失部分:
import re def regular_expression(): # 修正后的正则:开头必须是大写字母,中间至少1个字母/数字,结尾必须是数字 rules = "^[A-Z][a-zA-Z0-9]+[0-9]$" while True: username = input("Username Must have:\n" "- First character must be an upper case letter\n" "- Middle can be any letter or number\n" "- Last character must be a number\n" "> " ) if re.fullmatch(rules, username): print("Accepted") break # 匹配成功后退出循环,避免无限输入 else: print("Invalid username, try again.") # 调用函数 regular_expression()
核心修正说明
- 将
^移到正则最开头,明确指定匹配字符串的起始位置 - 移除冗余的
{1},简化正则逻辑 - 补充
import re模块,解决未导入依赖的问题 - 去掉不必要的
str(input(...)),因为input()本身返回字符串类型 - 添加不匹配时的提示信息,以及匹配成功后的循环退出逻辑,提升交互体验
内容的提问来源于stack exchange,提问作者charlie s
相关产品推荐
相关产品推荐

