Regex 正则表达式帮助。我需要用Groovy解决字符串计算器kata的问题
我正在和Groovy合作 为实现解决方案,有很多场景可以解决: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 /
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匹配的模式