【发布时间】:2021-12-09 04:51:27
【问题描述】:
目前,我有一个布尔表达式,它支持&(逻辑与)、|(逻辑或)、(、)(括号)运算符以及s, f, d, n, t 和作业名称等状态代码.
状态代码表示作业的状态。 (例如:s = success、f = failure 等...),作业名称用括号括起来,可选参数是引号内的数字。
示例 i/p:
( s(job_A, "11:00") & f(job_B) ) | ( s(job_C) & t(job_D) )
我的要求是在 Python 中对这样一个给定的字符串,我需要用包含前缀的新作业名称替换现有的作业名称,其他一切都应该保持不变:
示例 o/p:
( s(prefix_job_A, "11:00") & f(prefix_job_B) ) | ( s(prefix_job_C) & t(prefix_job_D) )
这个逻辑表达式可以像任何布尔表达式一样任意嵌套,并且是一种非常规语言,我们不能使用正则表达式。
请注意:作业名称事先不知道,因此我们无法将名称静态存储在字典中并执行替换。
我想到的当前方法是生成一个表达式树并在该树的 OPERAND 节点中执行替换,但是我不确定如何进行。 python中是否有任何库可以帮助我定义构建这棵树的语法?如何指定语法?
有人可以帮我解决这个问题吗?
编辑:作业名称没有任何特定形式。作业名称的最小长度为 6,并且作业名称是带有下划线的字母数字。
【问题讨论】:
-
所以我想工作名称实际上并不都具有
job_<x>的形式。 -
不,作业名称没有任何特定形式。它们可以是任意的
-
作业名称是否被限制为具有最小长度或来自特定的字符集,或者您是否有一个名为
s、f、d、n或t只要它在一组最大嵌套的括号内? -
我们可以假设 job_name 的最小长度是 6 并且作业名称是带有下划线的字母数字
标签: python string parsing autosys