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

时间:2019-08-09 14:53:26

标签: groovy

我在groovy中使用unix shell .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

我需要在一个函数内获取所有者名称的值,并将其作为变量传递回去,并且我还需要在另一个函数中环境的值。这将是两个单独的功能。

1 个答案:

答案 0 :(得分:1)

找不到能完成所有操作的正则表达式,但做了一些常规的修复:

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可用于将元组列表映射到单个映射中。