使用regex-Python进行复杂文本提取

2024-10-04 09:18:29 发布

您现在位置: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']]

我只需要拿出原来的话(成分),但不是百分率和东西含有一些东西。现在我正在使用以下正则表达式:

for i in range (len(ingredients)):
     regex = re.findall(r'\(E\d+\)|\(E \d+\)|([^\W\d]+(?:\s+[^\W\d]+)*)', ingredients[i])

它适用于几乎90%的情况,但是如果您将此代码粘贴到regex website 然后你会看到字符串中仍然有一些带有E的标记,我不知道如何删除它们。例如,(E450,E451)和E150d(没有括号的Es),这种文本对于regex仍然是不可访问的 我该怎么做?谢谢。你知道吗


Tags: iljante316suolae450vesihapettumisenestoaine
1条回答
网友
1楼 · 发布于 2024-10-04 09:18:29

I need to take out only original words (ingredients) but not the percentages and things contain E with something.

一个似乎很好的表达方式是:

\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

使用它匹配相关部分,并从匹配项创建新列表。你知道吗

如果不需要,只需稍加修改,就可以从匹配项中删除逗号和圆括号。你知道吗

相关问题 更多 >