Python正则表达式非匹配失效问题及纯数字输入验证方案
Python正则验证纯数字输入的正确实现
你之前的正则写法错误的核心原因是:在Python正则里,!只是普通字符,根本不是“非匹配”的否定符,所以你用![0-9]这类写法完全达不到检测非数字的效果,反而在找包含!加数字的字符串,这和你的需求完全不沾边。
先拆解你之前的错误写法:
re.search("![0-9]", card):这个正则是找字符串里是否存在!后面紧跟一个数字的子串,和“非数字字符”没有任何关系re.findall("![0-9]", card):同理,是提取所有!+数字的组合,无法检测非数字re.findall("^![0-9]", card):只判断字符串开头是不是!+数字,同样和需求无关
正确的实现方式
有两种常用的正则思路来验证纯数字输入:
思路1:检测是否存在非数字字符
用字符组取反[^0-9](注意^必须放在字符组[]的开头才表示取反),如果re.search找到任何非数字字符,就说明输入非法:
import re def ask_number() -> None: while True: card = input("Number: ") # 检测是否有非数字字符 if re.search(r"[^0-9]", card): print("false") continue print("true") break ask_number()
思路2:直接匹配整个纯数字字符串
用^\d+$(\d等价于[0-9])或者^[0-9]+$,确保整个字符串从开头到结尾都是数字(+表示至少有一个数字,避免空输入):
import re def ask_number() -> None: while True: card = input("Number: ") # 匹配整个字符串是否都是数字 if re.fullmatch(r"\d+", card): print("true") break print("false") ask_number()
这里用re.fullmatch比re.search更严谨,因为它会要求整个字符串完全匹配正则,而不是只要有部分匹配就返回结果。
内容的提问来源于stack exchange,提问作者cutelittlebunny
相关产品推荐
相关产品推荐

