我有一些字符串,例如:
"1+""2*3"*4"+"5*6""
使用一些正则表达式,答案应该是:
(1+((2*3)*4)+(5*6))
正则表达式能够实现这个吗?"+"
这样的操作符周围的双引号,那么它可能会产生完全不同的结果。from re import sub
def add_brackets(text):
return sub(r'["](?=\"*[(\d])', '(', text).replace('"', ')')
>>> add_brackets('"1+""2*3"*4"+"5*6""')
'(1+((2*3)*4)+(5*6))'
这里的原因是因为我们只考虑数字和运算符。如果我们添加变量,它仍然有效,但是如果添加更复杂的元素(如函数),则问题会变得更难。
然而,“递归语言”(即其中某些元素可以以自身为定义)更适合使用为此构建的工具解析,例如下推自动机。
正则语言泵引理表明像(n)n(一个包含一定数量开括号后紧接相同数量闭括号的字符串的语言)这样的语言无法用正则表达式验证。您在此描述的语言就是一个例子。因此,这个正则表达式不能验证它。一些编程语言(如Perl)具有扩展的正则表达式,使其可以验证平衡括号。这些不是正则表达式,至少不是由Stephen Kleene定义的。
s/((^|[-+*/"])[[:space:]]*)"([^"]*)"([[:space:]]*([-+*/"]|$))/\1\(\3\)\4/
。 - thb"
以及哪个要弹出?这不需要语法吗?期待您的解决方案。 - thb