[英]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.