我有这样一种产品的成分:
text = 'Pork and beef, water, salt (1,7%), spices (white pepper, nutmeg, coriander, cardamom), stabilizer (E450), glucose, antioxidant (E316), a preservative (E250), flavorings'
我想检测它的所有文本(成分),使它看起来像这样。
ingredientsList= ['Pork and beef', 'salt', 'spices', 'white pepper', 'nutmeg', 'coriander', 'cardamom', 'stabilizer', 'glucose', 'antioxidant', 'preservative', 'flavorings']
我在这里使用的当前正则表达式如下:
ingredients = re.findall(r'\([^()]*\)|([^\W\d]+(?:\s+[^\W\d]+)*)', text)
但它没有提供括号中的文字。我只是不想包含代码和百分比,但想要括号内的所有成分。我该怎么办?提前谢谢。
答案 0 :(得分:3)
您可以将第一个分支限制为仅匹配以E
开头且后跟数字的代码:
\(E\d+\)|([^\W\d]+(?:\s+[^\W\d]+)*)
请参阅regex demo
现在,\(E\d+\)
将匹配(Exxx)
- 仅限于子字符串,其他字符将被处理。您也可以在此处添加百分比,以明确跳过它们 - \((?:E\d+|\d+(?:[.,]\d+)?%)\)
。
import re
rx = r"\(E\d+\)|([^\W\d]+(?:\s+[^\W\d]+)*)"
s = "Pork and beef, water, salt (1,7%), spices (white pepper, nutmeg, coriander, cardamom), stabilizer (E450), glucose, antioxidant (E316), a preservative (E250), flavorings"
res = [x for x in re.findall(rx, s) if x]
print(res)