Regex 如何在Scala中用另一个正则表达式模式替换正则表达式模式?
我想在Scala中将一个正则表达式模式替换为另一个正则表达式模式,是否有任何直接的功能可以用于它?或者我应该一个接一个地找到每个正则表达式并更改它Regex 如何在Scala中用另一个正则表达式模式替换正则表达式模式?,regex,scala,Regex,Scala,我想在Scala中将一个正则表达式模式替换为另一个正则表达式模式,是否有任何直接的功能可以用于它?或者我应该一个接一个地找到每个正则表达式并更改它 val string1 = "(value1 + value2) + max(value3, max(value4, value5))" //convert to val string2 = "(value1 + value2) + lmax[(value3, lmax[(value4, value5)])]" 所
val string1 = "(value1 + value2) + max(value3, max(value4, value5))"
//convert to
val string2 = "(value1 + value2) + lmax[(value3, lmax[(value4, value5)])]"
所以,我想把string1转换成string2,基本上是转换
max(something) => lmax[(something)]
对不起,如果这是一个很幼稚的问题。我是Scala的新手。首先,你的问题与Scala关系不大。这更像是一个正则表达式问题 其次,您并不是真的用另一个正则表达式模式替换一个正则表达式模式。您正在尝试处理嵌套的捕获组,而regex并不擅长这一点 事实上,比这更糟。您试图捕获由匹配括号分隔的组。再说一遍,regex在这方面并不擅长 考虑这个字符串
"value1 + max((value2 + value3), max(value4, value5))"
现在,在外部捕获组中有两组括号。第一组不是目标,应该忽略,而第二组是应该捕获和替换的目标。这不是一件小事
当然,如果有人在代码中加了一个换行符,那么你就被套住了
"max(value12
+ value13)"
在我看来,正则表达式不是这个工作的工具。(但我以前错了…)那么我应该使用基于堆栈的求值,对吗?您需要编写一个解析器。