如何编写仅匹配空白字符或整数的字符串的正则表达式?
解决你的正则匹配问题
我明白你要的是能完整校验输入字符串的正则——确保整个输入只有空格和整数,不能混有其他字符对吧?刚好可以帮你搞定这个:
核心正则表达式
如果允许输入为空或者纯空白字符(比如用户只敲了几个空格),用这个:
^[\d\s]*$
如果要求输入至少有一个有效字符(不能是空字符串),就把*换成+:
^[\d\s]+$
为啥这个能行?
我给你拆解一下:
^和$是关键锚点,它们把匹配范围锁定在整个字符串上,不会出现“字符串里有合法部分就匹配成功”的情况。[\d\s]是字符集合:\d匹配任意0-9的数字,\s匹配任意空白字符(对你的场景来说主要就是空格)。*表示“零次或多次”,所以纯空白、纯数字、数字加空格的组合都能匹配;+则要求“至少一次”,排除空输入。
对应你的测试用例验证
- 合法输入:
'1'、'2 3'、' 3 56 '这些,全都会被这个正则精准匹配; - 非法输入:只要混了字母(比如
'4 e'、'shf ie sh f 8'),正则就会直接不通过,完美过滤。
和你现有提取代码结合用
你可以先校验输入合法性,再提取数字,代码示例:
import re user_input = input("请输入内容:") # 用fullmatch自动校验整个字符串,也可以用match加^$,效果一样 if re.fullmatch(r'[\d\s]*', user_input): # 还是用你原来的提取逻辑 numbers = [int(i) for i in re.findall(r'\b\d+\b', user_input)] print(f"提取到的数字:{numbers}") else: print("输入不合法!只能包含数字和空格哦")
内容的提问来源于stack exchange,提问作者Yann Droy
相关产品推荐
相关产品推荐

