[英]Complex text extraction using regex Python
我有一个复杂字符串列表,它们基本上是不同产品的成分,如下所示:
ingredients = [['Sianliha, Vispautuva kasvirasvasekoite, sorsanrinta, broilerinmaksa, valkuainen, porkkana, palsternakka, purjo, juuripersilja, madeira, suola, E407, valkosipuli, mustapippuri, E300. Vehnäjauho, margariini, suola, kananmunan keltuainen ja liivate.']
['Tomaattimurska 91,5%, ekstra neitsytoliiviöljy 2%, sipuli 2%, riisitärkkelys,basilika 1,3%, suola, sokeri.']
['Eksta neitsyoliiviöljy 38,2%, basilika 34,3%, cashew pähkinäjauhe, Grana Padano juusto 7%(sis. kananmunanjäänteitä), suola, pinjansiemen, perunahiutale, sokeri, happamuudensäätelyaine: maitohappo, antioksidantti: askorbiinihappo.']
['Tomaattimurska 46%, naudan- ja sianliha 24%, tomaattipyree 10,2%, porkkana, sipuli, selleri, ekstra neitsyoliiviöljy 1,8%, suola, vehnäjauho, maitojauhe, sokeri.']
['Tomaattimurska 91,5%, ekstra neitsytoliiviöljy 2%, sipuli 2%, riisitärkkelys,basilika 1,3%, suola, sokeri.']
['viinietikka, rypälemehutiiviste, väriaine E150d']
['valkoviinietikka, rypälemehutiiviste']
['Sian- ja naudanliha, vesi, 1-luokan sulatejuusto (maito, hapate, suola, vesi, maitorasva, happamuudensäätöaine (E509), sulatesuolat (E452, E339, E 331), paakkuuntumisenestoaine (E460)), suola (1,7 %), mausteet (kumina), hydrolysoitu kasviproteiini, kasvirasva, stabilointiaine (E452), säilöntäaine (E250), hapettumisenestoaine (E315,E316), aromit (kumina), mausteuutteet']
['Sian- ja naudan liha, vesi, perunajauho, suola (1,8 %), mausteet (sinapinsiemen), sakkaroosi, hydrolysoitu kasviproteiini, kasvirasva, stabilointiaineet (E450, E452), hapettumisenestoaineet (E315, E316), säilöntäaine (E250), mausteuutteet (mm. selleri, korianteri), aromit (mm.kumina)']
['Sian- ja naudanliha, vesi, suola (1,7 %), mausteet (kumina, mustapippuri, naga morich -chili, valkosipuli), hydrolysoitu kasviproteiini, kasvirasva, glukoosi, stabilointiaine (E450, E452), hapettumisenestoaine (E315,E316), säilöntäaine (E250), mausteuutteet, aromit']
['Sian- ja naudanliha, vesi, suola (1,7 %), mausteet (valkopippuri, muskottipähkinä, korianteri, kardemumma), stabilointiaine (E450), glukoosi, hapettumisenestoaine (E316), säilöntäaine (E250), aromit']
['Naudanliha, vesi, suola, (1,9 %), glukoosi, stabilointiaineet (E450, E451), hapettumisenestoaine (E316), säilöntäaine (E250), aromit']
['Sianliha, vesi, suola (1,7 %), mausteet (valkopippuri, muskottipähkinä, korianteri, kardemumma, valkosipuli), glukoosi, stabilointiaineet (E450, E451), hapettumisenestoaine (E316), säilöntäaine (E250), aromit']
['Sianliha, vesi, suola (1,7 %), hydrolysoitu kasviproteiini, kasvirasva, mausteet (mm.viherpippuri), glukoosi, stabilointiaine (E450, E451), hapettumisenestoaine (E300, E316), säilöntäaine (E250), mausteuutteet, aromit']
['Sian- ja naudanliha, vesi, suola (1,7 %), mausteet (valkopippuri, muskottipähkinä, korianteri, kardemumma), stabilointiaine (E450), glukoosi, hapettumisenestoaine (E316), säilöntäaine (E250), aromit']]
我只需要取出原始单词(成分)而不是百分比,而东西包含E。 现在我正在使用以下正则表达式:
for i in range (len(ingredients)):
regex = re.findall(r'\(E\d+\)|\(E \d+\)|([^\W\d]+(?:\s+[^\W\d]+)*)', ingredients[i])
它适用于几乎90%的情况,但如果你将这个代码粘贴在regex网站上,那么你会发现仍然有很少的带有E的令牌进入字符串,我无法弄清楚如何删除。 例如,(E450,E451)和E150d(没有括号的Es),这种文本仍然无法访问正则表达式我该怎么做? 谢谢。
我只需要取出原始单词(成分)而不是百分比,而东西包含E。
似乎做得很好的表达方式是这样的:
\s*\(?(?:\d+(?:[.,]\d+)?\s*%|E\s*\d+[a-z]?(?:\s*,\s*E\s*?\d+[a-z]?)*)\)?
分解:
\s* # leading whitespace
\(? # an opening "(", optional
(?: # start non-capturing group
\d+ # digits
(?:[.,]\d+)? # decimal part, comma or dot separator, optional
\s*% # a percent sign, optionally preceded by space
| # or...
E\s* # "E" followed by optional whitespace
\d+[a-z]? # multiple digits and an optional character
(?: # start non-capturing group
\s*,\s* # a comma, space optional
E\s* # "E" followed by optional whitespace
\d+[a-z]? # multiple digits and an optional character
)* # end group, repeat if possible
) # end group
\)? # a closing ")", optional
使用它来匹配相关部分并从匹配中创建新列表。
如果您不需要,可以通过小修改从匹配中删除逗号和括号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.