无法使用重复模式制定正则表达式

时间:2014-12-24 19:21:58

标签: regex python-2.7

我正在尝试在python中编写一个正则表达式,它可以返回类似模式的组。以下是一些示例输入 -

  • class:('MF YY' or 'XX') and status:('Active' or 'Pending')
  • class:('MF YY' or 'XX') and status:('Active' or 'Pending') and available:1
  • available:1
  • available:1 or class:('MF YY' or 'XX' or 'YY') * status:'Pending'

还有很多这样的组合。我希望输出格式如下 -
输入: class:('MF YY' or 'XX' or 'YY') and status:('Active' or 'Pending') or available:1
输出:

group 1: class:('MF YY' or 'XX' or 'YY')
group 2: and
group 3: status:('Active' or 'Pending')
group 4: or
group 5: available:1

这是我写的正则表达式 -

(\w*\:\(.*?\))(?:\s*(and|or)*\s*)

这会让我回复 -

group 1: class:('MF YY' or 'XX')
group 2: and

我可以将正则表达式更改为 -

(\w*\:\(.*?\))(?:\s*(and|or)*\s*)+(\w*\:\(.*?\))

返回 -

group 1: class:('MF YY' or 'XX')
group 2: and
group 3: status:('Active' or 'Pending')

但是,如果添加更多表达式,我的上述方法将无法扩展。我尝试添加* / +用于重复,但这不起作用。

如何实现3种类型的重复模式 -

  1. 字段:(' {something}'和/或{something} ...)
  2. 字段:{东西}
  3. 和/或组合这些较小表达式的运算符
  4. 提前感谢所有帮助。

1 个答案:

答案 0 :(得分:0)

我会使用或运算符(|)捕获每个:

\w+:\([^)]+\)|\w+:'[^']+'|\w+:\S+|(?:and|or)

第一部分\w+:\([^)]+\)获取field:('{something}' and/or {something} ...)

第二部分\w+:'[^']+'获取field:'{something}'

第三部分\w+:\S+获取field:{something}

最后一部分是操作员。

正则表达式从左到右工作,因此在尝试匹配第二,第三,第四等部分之前,始终检查第一部分。

将上述内容与re.findall一起使用,以获取每个匹配项的列表。

ideone demo