Regex 正则表达式帮助。我需要用Groovy解决字符串计算器kata的问题

Regex 正则表达式帮助。我需要用Groovy解决字符串计算器kata的问题,regex,groovy,pattern-matching,Regex,Groovy,Pattern Matching,我正在和Groovy合作 为实现解决方案,有很多场景可以解决: String numbers = "//+\n1+2+3" numbers.find(/(?s)\/\/(.*)\n/) { match -> def delimeter = match[1] // also match[0][2] numbers = numbers.minus(match[0]).replace(delimeter, ",") } 我有: //;\n1;2;3 //#\n1#2#3 /

我正在和Groovy合作

为实现解决方案,有很多场景可以解决:

String numbers = "//+\n1+2+3"

numbers.find(/(?s)\/\/(.*)\n/) { match ->
    def delimeter = match[1]  // also match[0][2]
    numbers = numbers.minus(match[0]).replace(delimeter, ",")
}
我有:

//;\n1;2;3
//#\n1#2#3
//+\n1+2+3
//*\n1*2*3
//?\n1?2?3
我想:

1,2,3
我的实施:

String numbers = "//;\n1;2;3"

numbers.find(/\/\/\S[\n]/) { match ->
    def delimeter = match[2]
    numbers = numbers.minus(match).replaceAll(delimeter, ",")
}
使用此解决方案我解决了第一个和第二个表达式,但我不知道如何解决其他表达式

java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0
问题是,我们还必须考虑与正则表达式匹配的任何符号,如<代码> +<代码>、<代码> *>代码>或<代码>

//(.)\n(\d)\1(\d)\1(\d)
需要使用链接。 ()-math thiw任意字符,以及\1-math thiw字符\

对于下一个示例,您可以应用以下内容:
/\[(.*?\]\\n(\d)\1(\d)\1(\d)
这是数学题

//[*]\n12**3

最后:
/\[(.*?\]\[(.*?\]\\n(\d)\1(\d)\2(\d)

//[*][%%]\n1*2%%3

最后:

//\[(.*?)\](?:\[(.*?)\])?\\n(\d)\1(\d)(?:\2|\1)(\d)
我想在那里很好用 附言:(\d)你可以替换你想要的。我认为您需要(\d*)

需要使用链接。 ()-math thiw任意字符,以及\1-math thiw字符\

对于下一个示例,您可以应用以下内容:
/\[(.*?\]\\n(\d)\1(\d)\1(\d)
这是数学题

//[*]\n12**3

最后:
/\[(.*?\]\[(.*?\]\\n(\d)\1(\d)\2(\d)

//[*][%%]\n1*2%%3

最后:

//\[(.*?)\](?:\[(.*?)\])?\\n(\d)\1(\d)(?:\2|\1)(\d)
我想在那里很好用
附言:(\d)你可以替换你想要的。我想您需要(\d*)

最后我有了解决方案:

String numbers = "//+\n1+2+3"

numbers.find(/(?s)\/\/(.*)\n/) { match ->
    def delimeter = match[1]  // also match[0][2]
    numbers = numbers.minus(match[0]).replace(delimeter, ",")
}
重要的一点(?s):

在dotall模式下,表达式。匹配任何字符,包括行终止符。默认情况下,此表达式与行终止符不匹配。 也可以通过嵌入的标志表达式(?s)启用Dotall模式


但问题确实在这里
。替换(delimeter,”)
最后我有了解决方案:

String numbers = "//+\n1+2+3"

numbers.find(/(?s)\/\/(.*)\n/) { match ->
    def delimeter = match[1]  // also match[0][2]
    numbers = numbers.minus(match[0]).replace(delimeter, ",")
}
重要的一点(?s):

在dotall模式下,表达式。匹配任何字符,包括行终止符。默认情况下,此表达式与行终止符不匹配。 也可以通过嵌入的标志表达式(?s)启用Dotall模式


但真正的问题就在这里
.replace(delimeter,”)

我认为没有很好地表达出来。我只需要一个与
//任何东西\u包括\u例如\u+\u或\u*\n匹配的模式,我认为没有很好地表达出来。我只需要一个与
//任何东西\u包括\u例如\u+\u或\u*\n匹配的模式