正确匹配连续数字需用d+而非d,否则多位数会被拆分;python中re.findall(r'd+', text)提取后转整型求和,负数和小数需额外正则支持。

直接用正则匹配所有数字(包括多位数),再转成整数累加即可,关键是正确识别连续数字片段,避免单个数字拆分。
匹配所有连续数字(含多位数)
用 d+ 而不是 d:前者匹配1位及以上的连续数字(如 "123" 整体捕获),后者只匹配单个数字字符(会把 "123" 拆成 1、2、3)。这是求和结果是否正确的关键。
Python 示例代码
import re <p>text = "价格:¥299,运费15元,优惠-8.5,库存还有102件" nums = [int(x) for x in re.findall(r'd+', text)] total = sum(nums)</p><p>print(nums) # [299, 15, 102] print(total) # 416 </p>
注意负数和小数的处理
默认 d+ 不匹配负号或小数点。如需支持:
- 负数:用 -?d+(如 "-8" 可匹配)
- 小数:用 -?d+.?d*(但需注意边界,建议配合 word boundary 或更严格模式)
- 实际中若含小数,推荐先用 -?d+.?d+ 匹配,再用 float() 转换,最后 int() 或保留浮点求和
其他语言简要参考
JavaScript:text.match(/d+/g)?.map(Number).reduce((a,b)=>a+b, 0) || 0
Java:用 Pattern.compile("\d+").matcher(str) 循环查找并累加
Shell(grep + awk):grep -oE '[0-9]+' file.txt | awk '{sum += $1} END {print sum}'











