python - 将括号放入字符串python

标签 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\((.+?) *, *(.+?)\)", 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)

关于python - 将括号放入字符串python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24087025/

相关文章:

php - 正则表达式不包含多行文本

python - 在 Python 中遍历字典或列表

python - 有条件合并列表中的子列表

python - 如何增加Google Colab单元输出宽度?

java - jsp与json格式的webservice数据进行字符串匹配和 checkin

C++ 读取只有数字的文件

python - Python 在 Mac OS 上找不到 CoreGraphics

python - 带 Unittest 的 Flask-WTF/WTForms 验证失败,但没有 Unittest 也能工作

regex - 如何改变氚变量字符串?

ruby - 在数字上拆分字符串,保留数字