在groovy中解析键值映射字符串

在groovy中解析键值映射字符串,groovy,Groovy,我在groovy中使用unixshell.execute命令调用后端服务器DSDB时得到了一些输出。它给我的是一个键值对列表,由一行分隔,每对由冒号分隔。我需要将每个键值对放置到地图中。这是我收到的输出: Group Name: groupName GID: 12345 Type: 1 Comments: Visibility: visibile1 Owner Name: name1 Owner Number: 123 Manager Name: ma

我在groovy中使用unixshell.execute命令调用后端服务器DSDB时得到了一些输出。它给我的是一个键值对列表,由一行分隔,每对由冒号分隔。我需要将每个键值对放置到地图中。这是我收到的输出:

Group Name:  groupName
       GID:  12345
      Type:  1
  Comments:
Visibility:  visibile1
Owner Name:  name1
Owner Number:  123
Manager Name:  manager1
Manager Number:  234
Environment:  dev
     State:  0

我需要在一个函数中获取Owner Name的值,并将其作为变量传回,我还需要在另一个函数中获取environment的值。这将是两个独立的函数。

找不到一个能够完成所有这些功能的正则表达式,但groovy修复了以下问题:

final data = """
Group Name:  groupName
       GID:  12345
      Type:  1
  Comments:
Visibility:  visibile1
Owner Name:  name1
Owner Number: 123
Manager Name: manager1
Manager Number: 234
Environment: dev
State: 0
"""

final a = (data =~ /\s*([^:]+):(.*)/) 
    .collect { [it[1], it[2].trim()] }
    .collectEntries()

assert a["Owner Name"] == "name1"
assert a["Environment"] == "dev"
默认情况下,Java模式处于单行模式。此正则表达式匹配以冒号分隔的键和值,并为每行查找匹配项

然后,collect将匹配映射到元组中。我还滥用这一步骤,从值中去掉前导空格,除了“来自注释”字段,该字段没有值


最后,collectEntries可用于将元组列表映射到单个映射。

您应该显示到目前为止编写的代码。可以按行拆分字符串,并按第一个冒号拆分每行,而无需任何正则表达式。除非您有多行注释值:请考虑像这样的现有问题