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
相关产品推荐
相关产品推荐

