【问题标题】:it possible use a named variable for print a named group in closure in groovy?是否可以使用命名变量在 groovy 的闭包中打印命名组?
【发布时间】:2018-08-15 01:16:29
【问题描述】:

类似这样的代码

请帮帮我

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

【问题讨论】:

  • 这里的name1和name2是什么?你的预期输出是什么?请稍微解释一下这个问题。
  • 是的 name1 和 name2 是正则表达式语句组的名称;我希望在这种情况下获得组 name1 “5”并打印
  • 这可以使用正则表达式 "56".replaceAll(/(?\d)(?\d)/, '${name1}') 但这不适用于其他用途
  • 您希望实现什么目标? replaceAll 应该如何处理这些组?

标签: java regex groovy closures


【解决方案1】:

你可以使用

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

输出:

5
6

this Groovy demo

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

【讨论】:

  • 这很好用;但更难把名字加一倍;非常感谢您的帮助
【解决方案2】:

如果我理解正确您的问题,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

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    • 2019-08-24
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多