值错误:没有足够的值来解压缩(预期为 2,得到 1),使用 split() 将字符串分成两部分不起作用



我有一个字符串:5kg .我需要将数字和文本部分分开。所以,在这种情况下,它应该产生两个部分:5kg

为此,我写了一个代码:

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

收到此错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-66-23a4dd3345a6> in <module>()
      1 grocery_uom = '5kg'
----> 2 unit_weight, uom = grocery_uom.split('[a-zA-Z]+', 1)
      3 #print(unit_weight)
      4 
      5 
ValueError: not enough values to unpack (expected 2, got 1)
    print(uom)

编辑:我写了这个:

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

现在我得到这个输出:

5 
-----

如何将字符串的第二部分存储到 var 中?

编辑1:我写了这篇文章,解决了我的目的(感谢彼得伍德(:

unit_weight = re.split('([a-zA-Z]+)', grocery_uom, 1)[0]
uom = re.split('([a-zA-Z]+)', grocery_uom, 1)[1]

您不想拆分"kg",因为这意味着它不是实际数据的一部分。虽然查看文档,但我看到您可以将它们包含在 https://docs.python.org/3/howto/regex.html 但是拆分模式旨在成为单独的模式。

下面是一个只为你想要的东西制作模式的例子:

import re
pattern = re.compile(r'(?P<weight>[0-9]+)W*(?P<measure>[a-zA-Z]+)')
text = '5kg'
match = pattern.search(text)
print (match.groups())
weight, measure = match.groups()
print (weight, measure)
print ('the weight is', match.group('weight'))
print ('the unit is', match.group('measure'))
print (match.groupdict())

输出

("5"、"千克"(
5 公斤
重量为5
单位为公斤
{"重量": "5", "测量": "公斤"}

您需要使用正则表达式拆分而不是简单的字符串拆分,您正在寻找拆分的精确模式是这样的,

(?<=d)(?=[a-zA-Z]+)

基本上是前面有数字的点,因此这个正则表达式(?<=d)后跟字母,因此这个正则表达式(?=[a-zA-Z]+),在这个带有粉红色标记的演示中可以看到。

检查将进行拆分的粉红色标记

另外,这是您修改后的Python代码,

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

指纹

unit_weight:  5 uom:  kg

此外,如果数字和单位之间可以有可选的空格,您可以更好地使用此正则表达式,它将在拆分过程中选择性地占用空间,

(?<=d)s*(?=[a-zA-Z]+)

演示允许可选空间

*更新以允许更大的数字,例如"1,000">
试试这个。

import re
grocery_uom = '5kg'
split_str = re.split(r'([0-9,?]+)([a-zA-Z]+)', grocery_uom, 1)
unit_weight, uom = split_str[1:3]
## Output:  5 kg

相关内容

最新更新