Захват повторяющихся групп, разделенных необязательными и / или - PullRequest
0 голосов
/ 13 апреля 2020

Вот обобщенный шаблон, с которым я борюсь

, если условие1 и | или условие2 , то действие1 и | или действие2

Условие а также действие обычно имеет такой шаблон: situation >= 10 or situationB = off|on

Проблема в том, что она повторяется и / или находится в состоянии / действии, она может полностью отсутствовать (0 и / или количество) или столько (*).

пример строки : situation >= 10 or situationB = off and situationC = on situation = on

Вот кое-что, что я попробовал, но мне нужна помощь:

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

regex101 link

Как изменить регулярное выражение так, чтобы оно могло сгруппируйте каждое из условий / действий, которые могут или не могут быть разделены и / или?

Ответы [ 2 ]

0 голосов
/ 13 апреля 2020

Вы можете использовать якорь \G для продолжения после предыдущего матча.

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

Regex101

0 голосов
/ 13 апреля 2020

Вы можете попробовать использовать следующий шаблон регулярных выражений:

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

Демо

Это соответствует в первой группе захвата все содержимое в между возможными and/or разделителями, включая последний член до конца строки.

Обратите внимание, что если вы используете язык программирования, то более простым вариантом может быть просто разделение на \s*\b(?:and|or)\b\s*, что получить массив / коллекцию подходящих терминов.

...