gpt4 book ai didi

python - Python 中的正则表达式帮助有选择地从数学表达式中删除括号

转载 作者:行者123 更新时间:2023-11-28 17:29:05 24 4
gpt4 key购买 nike

以下是一些示例输入:

x(n)+(y(n)+1)*n
x(n(a,b),a,b)+2^(y(n(a,b)+a+b)+1)
x(n)+(y(n)/(N(n)))

我希望他们的相应输出是:

x[n]+(y[n]+1)*n
x[n[a,b],a,b]+2^(y[n[a,b]+a+b]+1)
x[n]+(y[n]/(N[n]))

我写了下面的代码,但它没有给出任何输出:

def replace():
string='x(n)+2^(y(n)+1)'
print re.sub(r'/(\w+)\(([^()]+)\)/', '\1[\2]', string)

最佳答案

PyPi regex module支持递归。您可以安装它并使用以下代码:

>>> import regex
>>> p = regex.compile(r'\b[a-zA-Z]\w*(\((?>[^()]|(?1))*\))')
>>> s = "x(n)+(y(n)+1)*n\nx(n(a,b),a,b)+2^(y(n(a,b)+a+b)+1)\nx(n)+(y(n)/(N(n)))"
>>> print(p.sub(lambda m: m.group().replace("(", "[").replace(")", "]"), s))
x[n]+(y[n]+1)*n
x[n[a,b],a,b]+2^(y[n[a,b]+a+b]+1)
x[n]+(y[n]/(N[n]))

regex demo is available here .

\b[a-zA-Z]\w* 匹配类似标识符的序列(以字母开头的整个单词,然后是可选的单词字符(数字、字母或下划线) 和 (\((?>[^()]|(?1))*\)) 匹配嵌套的 (...()...)由于子例程调用 (?1)(递归、重复第 1 组中的模式)而产生的序列。

关于python - Python 中的正则表达式帮助有选择地从数学表达式中删除括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35915739/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com