我想要一个通用的解决方案来转换字符串的前缀符号成元组。下面的三个例子说明了我希望实现的目标。每个字符串都是列表中的一个元素(只有第二个示例有多个元素)。你知道吗
['neg(or(p,q))']
['imp(p,q)', 'imp(neg(r),neg(q))']
['and(and(p,q),r)']
变成
[('neg',('or','p','q'))]
[('imp','p','q'), ('imp',('neg','r'),('neg','q'))]
[('and',('and','p','q'),'r')]
一般来说,我想要的格式是('connective'、'parameter'、'parameter'),其中connective可以是'and'、'or'、'iff'、'imp'、'neg'。每个参数后面都有两个参数,除了“neg”只需要一个参数。参数可以是上面示例中所示的其他元组,它演示了嵌套公式。你知道吗
另一种看待这一点的方法是首先考虑激发问题的公式。你知道吗
例1 ((p∧q)∨(∨p∧q))最终成为
[('or',('and','p','q'),('and',('neg','p'),('neg','q')))]
例2 (p→q),(r→q)最终变成
[('imp','p','q'), ('imp',('neg','r'),('neg','q'))]
我尝试过:
import re
def tuplify(raw_sequent):
first_split = re.split('\(', raw_sequent, 1)
connective = first_split[0]
second_split = re.split('\,', first_split[1])
right_arg = second_split[-1]
second_split = second_split[:-1]
left_arg = ','.join(second_split)
tup = (connective, left_arg, right_arg[:-1])
return tup
但是,这并不能很好地概括,只适用于输入
'and(and(p,q),or(r))'
我想这个解决方案可能需要regex和递归的结合。你知道吗
这是一个使用Regex和字符串操作的解决方案,希望注释能解释发生了什么:
当我们使用
Regex
时,嵌套表达式中的技巧是我使用re.sub
首先将一个非嵌套表达式提取到一个列表中,并用它的索引替换它。继续这样做,直到没有表达式可提取。然后处理提取的表达式列表以执行所需的工作。你知道吗查看我对类似问题的回答,以便对这一技巧有一个清晰的认识:
Answer for Extract all variables from a string of Python code (regex or AST)
使用生成器的较短递归解决方案:
输出:
以下代码
提供:
因此
EXPRESSIONS
的输入所需的输出是相关问题 更多 >
编程相关推荐