gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 16:04:10 28 4
gpt4 key购买 nike

我有数千种产品的成分,例如:

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']

因此,在成分列表中,我没有对产品的百分比进行任何解释,甚至没有对一种成分本身包含的其他产品进行任何解释。正则表达式是执行此操作的好方法,但我不擅长制作正则表达式。有人可以帮助我制作正则表达式以获得所需的输出。提前致谢。

最佳答案

您可以尝试两种方法。

第一个是删除所有(...)子字符串以及任何不是 , 的内容之后(后面没有非单词边界)。

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

请参阅regex demo

详细信息:

  • \s* - 0+ 空格
  • \([^()]*\) - 一个(...)没有 ( 的子串和)里面:
    • \( - 字面量 (
    • [^()]* - 除 ( 之外的 0+ 个字符和) (a [^...] 是一个否定的字符类)
  • [^,]* - 除 , 之外的 0+ 个字符
  • (?:,\b[^,]*)* - 零个或多个序列:
    • ,\b - 逗号后跟字母/数字/下划线
    • [^,]* - 除 , 之外的 0+ 个字符.

这些匹配项将被删除,然后 ,\s*正则表达式用于用逗号和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)

关于python - 使用 python 将字符串转换为所需标记的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40018391/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com