Почему Pyparsing прекращает разбор после первого элемента? - PullRequest
0 голосов
/ 06 апреля 2020

Я работаю с булевыми строками, и я хотел бы рекурсивно извлечь те группы, которым предшествует NOT. Например,

'x=5 AND ((x=20) OR NOT (x=10 AND NOT x=20))'

Предикаты - это всегда какой-то текст, знак равенства и еще какой-то текст. Результат, который я ищу:

[['x=10', ['x=20']]]

Мой код тогда

import pyparsing as pp

def joinGroup(st, loc, t):
  x = t.asList()[0]

  return [''.join(x)]

x = 'x=5 AND ((x=20) OR NOT (x=10 AND NOT x=20))'
p = pp.Group(pp.Word(pp.alphanums) + '=' + pp.Word(pp.alphanums)).setParseAction(joinGroup)

expr = pp.infixNotation(p, [
                        ('NOT', 1, pp.opAssoc.RIGHT, )
                        ])

result = expr.parseString(x).asList()

Все, что я получаю, это ['x=5'].

...