在字符串python中插入括号

在字符串python中插入括号,python,regex,Python,Regex,我有这样一个输入字符串: f(x, 3*y) * 54 = 64 / (7 * x) + f(2*x, y-6) 我希望获得以下输出: (x / (3*y)) * 54 = 64 / (7 * x) + ((2*x) / (y-6)) 规则: 用“f”标记的括号中,删除“f”,而“,”标记必须改为/。如果其中一侧包含表达式,则必须将其放入括号f(2,2+x)=(2/(2+x)) 我的代码适用于大多数测试输入,但在某些测试案例中,它会生成错误的输出: line = sub(r"f\((.+?)

我有这样一个输入字符串:

f(x, 3*y) * 54 = 64 / (7 * x) + f(2*x, y-6)
我希望获得以下输出:

(x / (3*y)) * 54 = 64 / (7 * x) + ((2*x) / (y-6))
规则: 用“f”标记的括号中,删除“f”,而“,”标记必须改为/。如果其中一侧包含表达式,则必须将其放入括号f(2,2+x)=(2/(2+x))

我的代码适用于大多数测试输入,但在某些测试案例中,它会生成错误的输出:

line = sub(r"f\((.+?) *, *(.+?)\)", r"(\1 / \2)", (sub(r"f\((.+?[\+-/\*]+.+?) *, *(.+?)\)", r"f((\1),\2)", (sub(r"f\((.+?) *, *(.+?[\+-/\*]+.+?)\)", r"f(\1,(\2))", line)))))
这是我写的代码。正如我提到的,它工作得很好,但对于这一行:

f(x, 3*y) * 54 = 64 / (7 * x) + f(2*x, y-6)
我得到这个结果:

((x / (3*y)) * 54 = 64 / (7 * x) + (2*x) / (y-6))

其中一个括号放错了位置。我不知道是什么问题

你的正则表达式太复杂了

如果
x
(x)
不重要,您可以简单地使用:

正则表达式模式:
f\(\S+?),\S+(\S+?)

将其替换为:
\(\(\1\)/\(\2\)\)

这将给

((x)/(3*y))*54=64/(7*x)+((2*x)/(y-6))


对于
f(x,3*y)*54=64/(7*x)+f(2*x,y-6)

您需要详细说明规则。你到底想做什么还不清楚。你能用两到三个这样的字符串吗。我可以尝试所有通用的,你尝试把太多的替代品放在一行,但不能确定它在哪里中断。问题是
+?
在不应该匹配parens时匹配parens,与相比,您可以清楚地看到这一点。最好询问有关方法的问题,而不是您需要的代码。你也可以简化你的代码,让人们更容易理解。它是米x或(x),它必须是x