Python正则从字符串提取数字:仅能获取整数,如何同时提取小数?
数字提取逻辑适配小数场景调整
原实现仅能返回整数结果的核心原因是现有正则r'\d+'仅能匹配连续的纯数字片段,遇到带小数点的数值时,会将整数部分、小数部分拆分为两个独立结果,无法保留完整的小数结构。
调整方案
修改正则匹配规则,优先识别完整的小数结构,再识别纯整数内容,从根源避免小数被错误拆分:
- 核心适配正则:
r'\d+\.\d+|\d+' - 匹配逻辑:
- 优先匹配「整数部分+小数点+小数部分」的标准小数格式
- 未匹配到符合要求的小数结构时,再匹配连续的纯整数内容
- 保留原函数将匹配结果用
---拼接返回的逻辑不变
修改后完整代码
import re def vreplace_chars(third): vlist_of_numbers = re.findall(r'\d+\.\d+|\d+', third) vresult_number = '---'.join(vlist_of_numbers) return vresult_number number = vreplace_chars(imgchar)
适配效果
以输入字符串"测试值:12.5,基准值3,观测值0.89"为例:
- 原代码输出结果:
12---5---3---0---89 - 修改后输出结果:
12.5---3---0.89
边缘场景扩展
如果业务需要识别不带整数位的小数(如.72)、不带小数位的浮点形式数值(如45.),可以将正则表达式替换为r'\d+\.\d*|\.\d+|\d+',覆盖更多非常规数值格式。
内容的提问来源于stack exchange,提问作者Ron Bergen
相关产品推荐
相关产品推荐

