我有由布尔项和方程式组成的字符串,像这样
x=1 AND (x=2 OR x=3) AND NOT (x=4 AND x=5) AND (x=5) AND y=1
我想将x
分成由AND
分隔的组,同时将括号作为分组运算符。例如,上面的字符串的结果将是
[['x=1'], ['x=2', 'x=3'], ['x=4'], ['x=5'], ['x=5']]
x=2
和x=3
在同一组中,因为它们由()
分组并且没有被AND
分隔。最后一个方程式被忽略,因为它不是以x
开头。
我找到的最接近的是此post,但我不知道如何根据需要修改它。
我想你可以做这样的事情:
operators = ["AND NOT", "AND"]
sepChar = ":"
for op in operators:
yourInputString = yourInputString.replace(op,sepChar)
operationsList = youtInputString.split(sepChar) # ['x=1', '(x=2 OR x=3)', '(x=4 AND x=5)', 'y=1']
# For the second result, let's do another operation list:
operators2 = ["OR"]
output = []
for op in operationsList:
for operator in operators2:
op.replace("(","").replace(")","") # remove the parenthesis
if operator in op:
op = op.split(operator)
output.append(op)
# output = [['x=1'], ['x=2', 'x=3'], ['x=4'], ['x=5'], ['y=1']]
在这种情况下,我使用“:”作为分隔符,但是您可以根据需要进行更改。请告诉我是否有帮助!