You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python拆分字符串遇ValueError:如何分离数值与文本部分?

如何拆分字符串中的数值与单位部分?

我来帮你理清楚这个问题的解决思路和过程~

你需要把类似'5kg'这样的字符串拆分开,分别得到数值部分'5'和单位部分'kg',一开始的尝试踩了几个小坑,我们一步步来看:

1. 最初错误的尝试:用字符串的split()方法

你一开始写的代码是这样的:

grocery_uom = '5kg'
unit_weight, uom = grocery_uom.split('[a-zA-Z]+', 1)
print(unit_weight)

结果触发了ValueError: not enough values to unpack (expected 2, got 1)。这是因为普通字符串的split()方法不支持正则表达式作为分隔符,它会把'[a-zA-Z]+'当作一个普通的子串去匹配,而你的原字符串里根本没有这个内容,所以拆分后只会得到一个元素的列表['5kg'],自然没法拆成两个变量赋值。

2. 改用re.split()但没拿到单位

后来你换成了正则模块的re.split():

import re
grocery_uom = '5kg'
unit_weight, uom = re.split('[a-zA-Z]+', grocery_uom, 1)
print(unit_weight)
print('-----')
print(uom)

输出里uom是空字符串,这是因为re.split('[a-zA-Z]+', ...)会把匹配到的单位部分(也就是'kg')当作分隔符直接去掉,拆分后的结果是['5', ''],所以第二个变量拿到的是空值,不是我们想要的单位。

3. 正确的解决方法:用捕获组保留单位

要让re.split()把匹配到的单位也保留下来,只需要给正则表达式加上捕获组(也就是括号),这样拆分结果里就会包含分隔符本身:

import re
grocery_uom = '5kg'
# 拆分后得到 ['5', 'kg', ''],取前两个元素即可
split_result = re.split('([a-zA-Z]+)', grocery_uom, 1)
unit_weight = split_result[0]
uom = split_result[1]

print(unit_weight)  # 输出:5
print(uom)          # 输出:kg

或者更简洁的写法,直接用解包忽略最后那个空串:

import re
grocery_uom = '5kg'
unit_weight, uom, _ = re.split('([a-zA-Z]+)', grocery_uom, 1)
print(unit_weight)
print(uom)

这里的([a-zA-Z]+)就是捕获组,它会把匹配到的单位部分'kg'也加入到拆分结果列表中,这样我们就能轻松拿到数值和单位啦~

内容的提问来源于stack exchange,提问作者Debbie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:36:17