正则表达式匹配恰好3位数字失效问题求助
问题分析与解决
你的问题出在两个关键点:
- 正则表达式
[0-9]{3}仅匹配字符串中任意位置的连续3位数字,没有限制输入的整体范围 re.search()方法只要在输入里找到符合规则的子串就会返回匹配结果,所以像1234这种包含3位数字的长串也会被判定为有效
修复方案
方法1:给正则添加起止锚点
用^(匹配字符串开头)和$(匹配字符串结尾),强制要求整个输入恰好是3位数字:
import re pattern = "^[0-9]{3}$" # 也可以写成^\d{3}$,\d是[0-9]的简写 user_input = input() if re.search(pattern, user_input): print("valid") else: print("invalid")
方法2:使用re.fullmatch()方法
这个方法会要求整个字符串完全匹配正则规则,无需额外加锚点:
import re pattern = "[0-9]{3}" user_input = input() if re.fullmatch(pattern, user_input): print("valid") else: print("invalid")
两种方法都能实现需求,第一种锚点写法更直观,能明确表达“整个输入必须是3位数字”的规则。
内容的提问来源于stack exchange,提问作者alex
相关产品推荐
相关产品推荐

