Python 将字符串展开为代数表达式

Python 将字符串展开为代数表达式,python,string,Python,String,我有一组简单的字符串,表示一些DSL: my_str = ['("word 1" + "word 2") * "word 3"', '("word 1" + "word 2") * ("word 3" + "word 4")', '(("word 1" + "word 2") * ("word 3" + "word 4")) * "word 5"', ] 我试图(但失败得很严重)将这些更改为更直截了当的形式,例如 a = foo(my_

我有一组简单的字符串,表示一些DSL:

my_str = ['("word 1" + "word 2") * "word 3"',
          '("word 1" + "word 2") * ("word 3" + "word 4")',
          '(("word 1" + "word 2") * ("word 3" + "word 4")) * "word 5"',
         ]
我试图(但失败得很严重)将这些更改为更直截了当的形式,例如

a = foo(my_str)
a= [
 '("word 1" * "word 3") + ("word 2" * "word 3")',
 '("word 1" * "word 3") + ("word 1" * "word 4") + ("word 2" * "word 3") + ("word 2" * "word 4")',
 '("word 1" * "word 3" * "word 5") + ("word 1" * "word 4" * "word 5") + ("word 2" * "word 3" * "word 5") + ("word 2" * "word 4" * "word 5")',
]

这可能很简单,但我似乎无法理解逻辑。

好的,最后我使用了sympy和pyparsing的组合。 我使用pyparsing来理解变量之间的关系和层次结构,然后使用sympy来创建和扩展表达式

如果有人对一些过度编写的代码感兴趣,可以在此处查看。

这并不简单。我曾经阅读过Lisp教科书,其中有多章专门介绍如何构建一个简单的符号代数操纵器,而Lisp中的任务比Python中的要简单得多。所以,首先,不要惊慌,不是你做不到,只是你吃了比你意识到的更大的一口。第二,去友好的当地公共图书馆,买一本Lisp教科书,用Lisp完成这些章节,然后用Python回到任务中来。听起来像是一份工作。