cqwcns 发表于 2022-7-31 16:58

python,请教一个正则表达式的问题

本帖最后由 cqwcns 于 2022-7-31 16:59 编辑

我有一批商品名称,格式类似这样:

蒙牛纯甄常温风味酸牛奶送礼推荐200g*24纯正生牛乳发酵礼盒装(新老包装随机发货)
蒙牛纯牛奶全脂灭菌乳苗条装200ml×24包礼盒装
伊利纯牛奶250ml*24盒/箱全脂营养早餐伴侣优质乳蛋白整箱家庭装礼盒装
光明优加纯牛奶200ml*24盒钻石装(3.6g乳蛋白/100ml)(新旧包装随机发货)送礼整箱装礼盒
伊利高钙低脂牛奶营养早餐伴侣低脂高钙脂肪减半增加25%钙礼盒装250ml*21盒/箱
认养一头牛棒棒哒A2β-酪蛋白儿童全脂纯牛奶A2儿童牛奶营养早餐奶200ml*10盒*2提装送礼佳选
三元特品纯牛奶250ml*24盒/箱礼盒装EDTM自控牧场量贩装
蒙牛脱脂型纯牛奶250ml*24零脂肪轻负担(新老包装随机替换)礼盒装
伊利安慕希希腊风味常温酸奶原味205g*16盒/箱多35%蛋白质礼盒装早餐伴侣
圣牧有机纯牛奶品醇200ml*24盒沙漠绿洲有机奶全程有机可追溯清香甘甜早餐伴侣送礼高端礼盒
伊利舒化无乳糖牛奶高钙型零乳糖好吸收食品认证低GI家庭乐享装220ml*24盒/箱早餐伴侣
伊利纯牛奶250ml*21盒/箱全脂牛奶早餐伴侣
三元小方白纯牛奶250ml*24盒/箱礼盒装量贩装
伊利金典有机纯牛奶3.6g乳蛋白甄选有机牧场有机可追溯早餐伴侣礼盒装250ml*16盒/箱
光明纯牛奶250mL*24盒(新老包装随机发货)送礼整箱礼盒装
纽仕兰4.0g蛋白质新西兰进口牛奶牧场草饲高钙礼盒全脂纯牛奶250ml*24钻石版整箱装
蒙牛纯牛奶250ml×24盒装(新老包装随机发货)
蒙牛特仑苏低脂牛奶250ml*16脂肪减少50%以上礼盒装
纽仕兰新西兰进口牛奶3.5g蛋白质牧场草饲高钙礼盒全脂纯牛奶乳品250ml*24整箱装
三元极致有机纯牛奶200ml*21礼盒装专属牧场有机认证量贩装
蒙牛真果粒牛奶饮品(草莓+芦荟+椰果+桃果粒)250g*24四种口味缤纷礼盒装(新老包装随机发货)
蒙牛特仑苏有机纯牛奶3.8g蛋白质含量升级250ml*24梦幻盖礼盒装(新老包装随机发货)
认养一头牛全脂纯牛奶250ml*15盒加量装学生成人营养早餐纯奶整箱批发一提装送礼佳选
安佳(Anchor)新西兰原装进口全脂纯牛奶11.6g乳总固体/100mL高钙全脂250ml*24整箱装
伊利金典金小典儿童有机牛奶195ml*16盒/箱儿童成长牛奶早餐伴侣优质乳蛋白礼盒装

需求是提取出每个商品的规格、计量单位和数量,例如这样:
蒙牛纯甄常温风味酸牛奶送礼推荐200g*24纯正生牛乳发酵礼盒装(新老包装随机发货)→
蒙牛纯牛奶全脂灭菌乳苗条装200ml×24包礼盒装→
纽仕兰新西兰进口牛奶3.5g蛋白质牧场草饲高钙礼盒全脂纯牛奶乳品250ml*24整箱装→
蒙牛真果粒牛奶饮品(草莓+芦荟+椰果+桃果粒)250g*24四种口味缤纷礼盒装(新老包装随机发货)→
蒙牛特仑苏有机纯牛奶3.8g蛋白质含量升级250ml*24梦幻盖礼盒装(新老包装随机发货)→

这个需求对于我们这种菜鸡来说,这很复杂。
首先我们发现连接数据的有用*号的,也有用×的。
其次,例如这条还夹带了一个没有用的3.8g:
蒙牛特仑苏有机纯牛奶3.8g蛋白质含量升级250ml*24梦幻盖礼盒装(新老包装随机发货)→

自己研究了一番,连思路都没有,请各位大佬指教、交流,感谢。

hujachin 发表于 2022-7-31 17:14

(\d{3})(ml|g)[\*\×](\d+)

zhangbo093 发表于 2022-7-31 17:16

vsCode的正则:\d{3}\w{1,2}[*×]\d{2}

zhangbo093 发表于 2022-7-31 17:25

import re

line = "蒙牛特仑苏有机纯牛奶3.8g蛋白质含量升级250ml*24梦幻盖礼盒装(新老包装随机发货)"

searchObj = re.search(r'(\d{3})(\w{1,2})[*×](\d{2})', line, re.M | re.I)

if searchObj:
    print("searchObj.group() : ", searchObj.group())
    print("searchObj.group(1) : ", searchObj.group(1))
    print("searchObj.group(2) : ", searchObj.group(2))
    print("searchObj.group(3) : ", searchObj.group(3))


示意图:

grekevin 发表于 2022-7-31 17:25

(\d+)(+?)[\*\×](\d+)

注意:×从原数据复制,这个不是英文字母

wty3025 发表于 2022-7-31 17:35

莫名其妙在最前面加了个.*? 不过不影响

本帖最后由 wty3025 于 2022-7-31 17:42 编辑


ans = []
result = re.compile(r'(?P<a>\d{1,3})(?P<b>\w{1,2})[*×](?P<c>\d+).*?\n', re.S).finditer(content)
for it in result:
    ans.append()
print(ans)

wkdxz 发表于 2022-7-31 18:12

本帖最后由 wkdxz 于 2022-7-31 18:27 编辑

我也来试试
import re

STRS = '''蒙牛纯甄常温风味酸牛奶送礼推荐200g*24纯正生牛乳发酵礼盒装(新老包装随机发货)
蒙牛纯牛奶全脂灭菌乳苗条装200ml×24包礼盒装
伊利纯牛奶250ml*24盒/箱全脂营养早餐伴侣优质乳蛋白整箱家庭装礼盒装
光明优加纯牛奶200ml*24盒钻石装(3.6g乳蛋白/100ml)(新旧包装随机发货)送礼整箱装礼盒
伊利高钙低脂牛奶营养早餐伴侣低脂高钙脂肪减半增加25%钙礼盒装250ml*21盒/箱
认养一头牛棒棒哒A2β-酪蛋白儿童全脂纯牛奶A2儿童牛奶营养早餐奶200ml*10盒*2提装送礼佳选
三元特品纯牛奶250ml*24盒/箱礼盒装EDTM自控牧场量贩装
蒙牛脱脂型纯牛奶250ml*24零脂肪轻负担(新老包装随机替换)礼盒装
伊利安慕希希腊风味常温酸奶原味205g*16盒/箱多35%蛋白质礼盒装早餐伴侣
圣牧有机纯牛奶品醇200ml*24盒沙漠绿洲有机奶全程有机可追溯清香甘甜早餐伴侣送礼高端礼盒
伊利舒化无乳糖牛奶高钙型零乳糖好吸收食品认证低GI家庭乐享装220ml*24盒/箱早餐伴侣
伊利纯牛奶250ml*21盒/箱全脂牛奶早餐伴侣
三元小方白纯牛奶250ml*24盒/箱礼盒装量贩装
伊利金典有机纯牛奶3.6g乳蛋白甄选有机牧场有机可追溯早餐伴侣礼盒装250ml*16盒/箱
光明纯牛奶250mL*24盒(新老包装随机发货)送礼整箱礼盒装
纽仕兰4.0g蛋白质新西兰进口牛奶牧场草饲高钙礼盒全脂纯牛奶250ml*24钻石版整箱装
蒙牛纯牛奶250ml×24盒装(新老包装随机发货)
蒙牛特仑苏低脂牛奶250ml*16脂肪减少50%以上礼盒装
纽仕兰新西兰进口牛奶3.5g蛋白质牧场草饲高钙礼盒全脂纯牛奶乳品250ml*24整箱装
三元极致有机纯牛奶200ml*21礼盒装专属牧场有机认证量贩装
蒙牛真果粒牛奶饮品(草莓+芦荟+椰果+桃果粒)250g*24四种口味缤纷礼盒装(新老包装随机发货)
蒙牛特仑苏有机纯牛奶3.8g蛋白质含量升级250ml*24梦幻盖礼盒装(新老包装随机发货)
认养一头牛全脂纯牛奶250ml*15盒加量装学生成人营养早餐纯奶整箱批发一提装送礼佳选
安佳(Anchor)新西兰原装进口全脂纯牛奶11.6g乳总固体/100mL高钙全脂250ml*24整箱装
伊利金典金小典儿童有机牛奶195ml*16盒/箱儿童成长牛奶早餐伴侣优质乳蛋白礼盒装'''

res = re.findall(r'(\d+)(ml|g)[*x×](\d+)', STRS, re.S | re.I)

ls =

print(ls)

cqwcns 发表于 2022-7-31 18:30

这么多大佬,感谢感谢。

外酥内嫩 发表于 2022-7-31 21:10

大佬太牛了

by黑胡椒 发表于 2022-7-31 21:26

s="伊利金典金小典儿童有机牛奶195ml*16盒/箱儿童成长牛奶早餐伴侣优质乳蛋白礼盒装"


print(re.findall(r"(.+)(\d{3,})(ml|g)[\*×](\d+)",s))

python代码要导入re库
页: [1] 2
查看完整版本: python,请教一个正则表达式的问题