gpt4 book ai didi

python正则表达式从极其复杂的成分字符串中解析数据

转载 作者:太空宇宙 更新时间:2023-11-04 10:30:09 24 4
gpt4 key购买 nike

我有一个字符串,其中包含一些格式非常糟糕的成分列表(在本例中已缩短):

Vitamin A 6,000iu/kg, Vitamin D3 80iu/kg, Vitamin E PLUS 240iu/kg

我想将字符串分解为包含格式 [label, amount, units] 的列表:

[[Vitamin A, 6000, iu/kg], ...]

问题是数字(即6,000)中有, 作为分隔符。我不能简单地用逗号分隔。标签可以是任意数量的字母/数字(即 Super Duper Vitamin c4390 4.5iu/kg),这使得区分标签和数量变得更加困难。单位可以从 mg/kgiu/kg 变化。该列表不限于维生素成分。它可以包含其他词,例如 Potassium。还有小数。

另一个问题是存在边缘情况:

边缘情况:逗号 AND 后缺少空格,某些成分可能缺少逗号分隔符。

Vitamin A 6,000iu/kg,Vitamin D3 80iu/kg Vitamin E PLUS 240iu/kg, Potassium 3.2mg/kg

我能做的最好的就是这个正则表达式:

^(([a-zA-Z]*\s+)*(\d+[,]?\d+)([a-z\/]*))

哪个(不完全)匹配第一个成分,它不处理任何边缘情况。如何从这个乱七八糟的字符串中提取我想要的数据?

编辑:

Here is a real example

最佳答案

([a-zA-Z\s0-9]+)\s+([\d,.]+)([^, ]+)(?=,|$|\s)

试试这个。你不需要拆分。使用 re.findall。查看演示。

http://regex101.com/r/yR3mM3/32

import re
p = re.compile(r'([a-zA-Z\s0-9]+)\s+([\d,.]+)([^, ]+)(?=,|$|\s)', re.MULTILINE | re.IGNORECASE)
test_str = "Vitamin A 6,000iu/kg, Vitamin D3 80iu/kg, Vitamin E PLUS 240iu/k"

re.findall(p, test_str)

输出:[('维生素 A', '6,000', 'iu/kg'), ('维生素 D3', '80', 'iu/kg'), ('维生素 E PLUS', '240', 'iu/k')]

关于python正则表达式从极其复杂的成分字符串中解析数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27268359/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com