在字符串中添加括号 Python

1 投票
1 回答
22087 浏览
提问于 2025-04-18 08:53

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

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))

有一个括号的位置不对。我不知道问题出在哪里。

1 个回答

3

你的正则表达式太复杂了。

如果 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)

撰写回答