如何在Scala中用另一个正则表达式模式替换正则表达式模式?

时间:2015-12-04 06:46:59

标签: regex scala

我想在Scala中将正则表达式模式替换为另一个正则表达式模式,是否有可用于它的直接功能?或者我应该逐个找到每个正则表达式并进行更改。

    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的新手。

1 个答案:

答案 0 :(得分:2)

首先,您的问题与Scala几乎没有关系。它更像是一个正则表达式问题。

其次,您并没有真正用另一种正则表达式模式替换正则表达式模式。您正在尝试处理嵌套捕获组,而正则表达式并不擅长。

事实上,情况比这更糟糕。您正在尝试捕获由匹配括号分隔的组。再一次,正则表达式并不擅长。

考虑这个字符串。

"value1 + max((value2 + value3), max(value4, value5))"

现在,您在外部捕获组中有两组括号。第一组不是目标,应该被忽略,而第二组是应该被捕获和替换的目标。这不是一项微不足道的任务。

当然,如果有人在代码中加了一个换行符,那么你就会被冲洗掉。

"max(value12
   + value13)"

在我看来,正则表达式并不是这项工作的工具。 (但我以前错了......)