使用python将字符串转换为所需标记的列表

2024-09-28 01:23:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有上千种产品的原料,例如:

Ingredient = 'Beef stock (beef bones, water, onion, carrot, beef meat, parsnip, thyme, parsley, clove, black pepper, bay leaf), low lactose cream (28%), onion, mustard, modified maize starch,tomato puree, modified potato starch, butter sugar, salt (0,8%), burnt sugar, blackcurrant, peppercorns (black, pink, green, all spice, white) 0,4%.'

我希望这种成分的形式如下:

listOfIngredients = ['Beef Stock', 'low lactose cream', 'onion', 'mustard', 'modified maize starch','tomato puree', 'modified potato starch', 'butter sugar', 'salt', 'burnt sugar', 'blackcurrant', 'peppercorns']

因此,在配料表中,我没有任何关于产品百分比的解释,甚至没有一种配料本身含有的其他产品。正则表达式是一个很好的方法,但我不擅长使正则表达式。有人能帮我制作正则表达式以获得所需的输出吗。提前谢谢。你知道吗


Tags: 产品sugarlowmodifiedblackcreambeeftomato
1条回答
网友
1楼 · 发布于 2024-09-28 01:23:12

你可以尝试两种方法。你知道吗

第一种方法是删除所有(...)子字符串和任何不在,之后的子字符串(后面没有非单词边界)。你知道吗

\s*\([^()]*\)[^,]*(?:,\b[^,]*)*

参见regex demo

详细信息:

  • \s*-0+空格
  • \([^()]*\)-内部没有()(...)子串:
    • \(-文字(
    • [^()]*-0+字符,而不是()(a [^...]是一个否定字符类
  • [^,]*-0+除,以外的字符
  • (?:,\b[^,]*)*-零个或多个序列:
    • ,\b-后跟字母/数字/下划线的逗号
    • [^,]*-0+个字符,而不是,。你知道吗

删除这些匹配项,然后使用,\s*regex用逗号和0+空格分割字符串以获得最终结果。你知道吗

第二种是基于匹配和捕获仅由字母(和_)组成的单词,并且只匹配(...)子字符串。你知道吗

\([^()]*\)|([^\W\d]+(?:\s+[^\W\d]+)*)

参见second regex demo

详细信息:

  • \([^()]*\)-一个(...)子串,内部没有()
  • |-或
  • ([^\W\d]+(?:\s+[^\W\d]+)*)-第1组:
    • [^\W\d]+-1+字母或下划线(您可以在\d之后添加_以排除下划线)
    • (?:\s+[^\W\d]+)*-0+序列:
      • \s+-1个或多个空格
      • [^\W\d]+-1+字母或下划线

对于当前字符串,两者都返回相同的结果,但以后可能需要对其进行调整。你知道吗

Python demo

import re
Ingredient = 'Beef stock (beef bones, water, onion, carrot, beef meat, parsnip, thyme, parsley, clove, black pepper, bay leaf), low lactose cream (28%), onion, mustard, modified maize starch,tomato puree, modified potato starch, butter sugar, salt (0,8%), burnt sugar, blackcurrant, peppercorns (black, pink, green, all spice, white) 0,4%.'
res = re.sub(r'\s*\([^()]*\)[^,]*(?:,\b[^,]*)*', "", Ingredient)
print(re.split(r',\s*', res))

vals = re.findall(r'\([^()]*\)|([^\W\d]+(?:\s+[^\W\d]+)*)', Ingredient)
vals = [x for x in vals if x]
print(vals)

相关问题 更多 >

    热门问题