在groovy中解析键值映射字符串
我在groovy中使用unixshell.execute命令调用后端服务器DSDB时得到了一些输出。它给我的是一个键值对列表,由一行分隔,每对由冒号分隔。我需要将每个键值对放置到地图中。这是我收到的输出:在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
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可用于将元组列表映射到单个映射。您应该显示到目前为止编写的代码。可以按行拆分字符串,并按第一个冒号拆分每行,而无需任何正则表达式。除非您有多行注释值:请考虑像这样的现有问题