Я работаю с булевыми строками, и я хотел бы рекурсивно извлечь те группы, которым предшествует 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']
.