我有一个像“ 2 +√√81.0-1” 这样的字符串。我想将此字符串转换为“ 2 + sqrt(sqrt(81.0))-1” 。我有一个算法在做这种转换:
import re
val = ["2", "+", "√", "√", "8", "1", ".", "0", "-", "1"]
find_sqrt = 0
for n, i in enumerate(val):
if i == "√":
val[n] = "sqrt("
find_sqrt += 1
continue
if (re.match(r"\D[^.√]", i)) and (find_sqrt > 0):
val[n-1] += ")" * find_sqrt
find_sqrt = 0
if find_sqrt > 0:
val.append(")" * find_sqrt)
find_sqrt = 0
print(''.join(val))
但是在输出中,我有“ 2 + sqrt(sqrt(81.0-1))” 。由于某种原因,我的正则表达式看不到“-”并跳过了它。
我需要帮助来修复我的正则表达式。而且,如果您知道将“√9-1”转换为“ sqrt(9)-1”的简便方法,我将很高兴为您提供帮助!
答案 0 :(得分:2)
使用堆栈来正确关闭括号。
val = ["2", "+", "√", "√", "8", "1", ".", "0", "-", "1"]
stack = []
result=[]
stackresult=[]
index=0
while(index<len(val)):
if val[index] == "√":
stack.append(val[index])
for iterator in range (index+1,len(val)):
if val[iterator] == "-": #check for all operator here (or all ops)
while(len(stack)!=0):
stack_pop=stack.pop()
if(stack_pop=="√"):
stackresult.insert(0,")");
stackresult.append("sqrt(")
else:
stackresult.append(stack_pop);
stackresult.reverse()
result.extend(stackresult)
break
else:
stack.append(val[iterator])
index+=1
else:
result.append(val[index])
index+=1
print(''.join(result))
了解更多: https://www.geeksforgeeks.org/check-for-balanced-parentheses-in-python/
答案 1 :(得分:0)
您要尝试建立一个解析器。处理单个字符只能满足基本的解析要求。对于这样的事情,您应该使用Lexer,以便将45+32
之类的字符串拆分为
block1 - 45 - NUM
block2 - + - TOKEN
block3 - 32 - NUM
使用此操作可以在上下文中执行。请查看此页面以获取详细信息: