我在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
我需要在一个函数内获取所有者名称的值,并将其作为变量传递回去,并且我还需要在另一个函数中环境的值。这将是两个单独的功能。
答案 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
可用于将元组列表映射到单个映射中。