如何在Python中使用正则表达式筛选含空格的数值
问题解决:正则匹配带小数的数字
错误原因分析
- 你第一次用的
(\d+)只能匹配整数部分,小数点和后面的数字不在\d的匹配范围内,所以只抓到了2,漏掉了.1。 - 第二次的正则还是用
(\d+)匹配数字,但目标字符串里的是带小数的2.1和296.2,根本匹配不到整数,所以re.search返回None,调用group()自然会报AttributeError。
正确的正则写法
要匹配带小数的浮点数,需要把小数点和后续数字也包含进去,用\d+\.\d+来匹配“整数部分+小数点+小数部分”的结构。如果要兼容整数(比如可能出现5或3.这种情况),可以用更通用的\d+\.?\d*|\.\d+。
示例代码
import re s = 'abc (efg): 2.1 296.2' # 匹配前缀 + 两个带小数的数字 pattern = r'abc\s+\(efg\):\s+(\d+\.\d+)\s+(\d+\.\d+)' s1 = re.search(pattern, s) # 先判断是否匹配成功,避免报错 if s1: print("完整匹配内容:", s1.group()) print("第一个数字:", s1.group(1)) print("第二个数字:", s1.group(2))
运行结果
完整匹配内容: abc (efg): 2.1 296.2 第一个数字: 2.1 第二个数字: 296.2
额外提醒
以后用re.search的时候,一定要先检查返回值是不是None,再调用group()或其他方法,避免出现类似的属性错误。
内容的提问来源于stack exchange,提问作者Kishan
相关产品推荐
相关产品推荐

