如何修改Python代码让提取字符串中数字时保留小数点
问题原因
原有代码仅通过isdigit()判断字符是否为数字,直接过滤掉了小数点,因此会丢失小数的小数点分隔符。
修改方案
方案1:调整原有遍历逻辑,新增小数点校验规则
在保留数字的同时限制每个数字串仅可出现1次小数点,避免出现8.2.9这类非法格式:
def getDigits(s): answer = [] for char in s.split(";"): k = "" dot_count = 0 for split_s in char: if split_s.isdigit(): k += split_s # 仅允许数字后出现1次小数点,可根据需求调整是否允许小数点开头 elif split_s == "." and dot_count == 0 and k: k += split_s dot_count += 1 if k: # 去除末尾残留的无效小数点,比如匹配到`8.`的场景会处理为`8` k = k.rstrip(".") answer.append(k) return answer
针对输入s = 'hiking;time:106,01;distance:8.29',返回结果为['10601', '8.29'],符合预期。
方案2:使用正则匹配简化实现
直接通过正则匹配合法的整数/小数格式,代码更简洁易维护:
import re def getDigits(s): answer = [] for part in s.split(";"): # 匹配整数或小数格式的数字串 nums = re.findall(r'\d+\.?\d*', part) answer.extend(nums) return answer
内容的提问来源于stack exchange,提问作者Bruffff
相关产品推荐
相关产品推荐

