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

时间:2016-10-13 10:25:09

标签: python regex

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

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

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

1 个答案:

答案 0 :(得分:1)

您可以尝试两种方法。

第一个是删除所有(...)子字符串以及之后不是,的任何字符串(未跟随非字边界)。

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

请参阅regex demo

<强>详情:

  • \s* - 0+ whitespaces
  • \([^()]*\) - 内部没有(...)(的{​​{1}}子字符串:
    • ) - 文字\(
    • ( - 除[^()]*(以外的0个字符()否定的字符类
  • [^...] - 除[^,]*
  • 以外的0个字符
  • , - 零个或多个序列:
    • (?:,\b[^,]*)* - 后跟字母/数字/下划线的逗号
    • ,\b - 除[^,]*以外的0 +字符。

删除这些匹配项,然后使用, regex将字符串与逗号和0+空格分开以获得最终结果。

第二个是基于匹配和捕获字母组成的字母(和,\s*),只匹配_子字符串。

(...)

请参阅second regex demo

<强>详情:

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

两者都返回当前字符串的相同结果,但您可能希望将来调整它。

请参阅Python demo

[^\W\d]+