我有这个功能:
def req_splitter(req_string):
req = {}
if " AND " in req_string:
cond = "AND"
req_splitted = req_string.split(" AND ")
elif " OR " in req_string:
cond = "OR"
req_splitted = req_string.split(" OR ")
else:
cond = "AND"
req_splitted = [req_string]
if len(req_splitted) > 1:
for sub_req in req_splitted:
sub_req_splitted = req_splitter(sub_req)
req[cond] = list()#new_req
req[cond].append(sub_req_splitted)
else:
req[cond] = req_splitted
return req
它旨在将这样的字符串转换为 json-logic 条件:
Barracks AND Tech Lab
Lair OR Hive
Hatchery OR Lair OR Hive
Cybernetics Core AND Gateway OR Warpgate
Forge AND Twilight Council AND Ground Armor 1
Spire OR Greater Spire AND Hive AND Flyer Flyer Carapace 2
Spire OR Greater Spire AND Lair OR Hive AND Flyer Attacks 1
json_logic 条件如下所示:
{
"and": [
{
"or": [
"Gateway",
"Warpgate"
]
},
"Cybernetics Core"
]
}
我的递归函数应该如何帮助我将字符串拆分为条件对象,就像上面的示例一样?
为了帮助您理解问题:
json_logic是一个检查条件的模块,就像您在上面看到的字典并返回一些结果,具体取决于您比较它的内容。
以及条件如何工作:键值 par 是一个单一的逻辑语句。键代表逻辑条件。列表中的值代表操作数。如果一个值本身不是一个列表而是一个字典,它会递归。
您可以将其与“波兰符号”进行比较
最后一件事 - AND 语句比 OR 语句具有更高的优先级,并且 OR 语句总是在一起。