捕获由可选 and/or 分隔的重复组

Capture repetitive groups separated by optional and/or

这是我正在努力解决的通用模式

if condition1 and|or condition2 then action1 and|or action2

条件和动作通常有这样的模式:
situation >= 10 or situationB = off|on

问题是 condition/action 中的重复 and/or,它可能完全不存在(and/or 的计数为 0)或一样多 (*)。

示例字符串:
situation >= 10 or situationB = off and situationC = on
situation = on

这是我尝试过但需要一些帮助的东西:

^\s*(\w+)\s*(=|\>=)\s*(\d+|\w+)\s*(and|or)?

regex101 link

如何修改正则表达式,以便它可以将可能由 and/or 分隔或不分隔的每个 conditions/actions 分组?

您可以尝试使用以下正则表达式模式:

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

Demo

这会在第一个捕获组中匹配可能的 and/or 分隔符之间的所有内容,包括最后一项直到字符串结尾。

请注意,如果您使用的是编程语言,那么更简单的选择可能是仅拆分 \s*\b(?:and|or)\b\s*,这将产生 array/collection 个匹配项。

您可以使用 \G 锚点在上一场比赛后继续。

(?:^|\G)(?<variable>\w+)\s*(?<operator>>?=)\s*(?<value>\w+)\s*(?:(?<conjunct>and|or) )?

Regex101