可以使用命名变量在groovy的闭包中打印命名组吗?

时间:2018-03-07 02:59:50

标签: java regex groovy closures

像这段代码

请帮帮我

"56".replaceAll(/(?<name1>\d)(?<name2>\d)/){print name1}

2 个答案:

答案 0 :(得分:2)

您可以使用

"56".replaceAll(/(?<name1>\d)(?<name2>\d)/) {_, name1, name2 ->
      println name1
      println name2
}

输出:

5
6

请参阅this Groovy demo

这里的要点是Matcher返回的匹配对象包含3个组,即它等于捕获组的数量,整个匹配本身为0组。因此,你应该提供所有3个关闭参数,然后你可以打印任何你喜欢的。

答案 1 :(得分:1)

如果我理解你的问题是正确的,那么Get as a map将永远帮助你。如下面显示的代码。

println getMap('12345').name1    

Map getMap (String input)
    {
        Map namemap = [:]

        input.eachWithIndex{val, id ->  id+=1 ; namemap["name$id"]=val}

        return namemap

    }