以下是一些示例输入:
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)
答案 0 :(得分:2)
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]))
\b[a-zA-Z]\w*
匹配类似标识符的序列(以字母开头的整个单词,然后是可选的单词字符(数字,字母或下划线),(\((?>[^()]|(?1))*\))
匹配嵌套的(...()...)
序列感谢子程序调用{{1}}(递归,重复,第1组中的模式)。