首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Groovy grep +构建键值

Groovy grep +构建键值
EN

Stack Overflow用户
提问于 2021-12-22 14:24:17
回答 2查看 37关注 0票数 0

我有一个变量,用于保存以下文本:

代码语言:javascript
复制
blablablabla
blablablabla
blablablabla
messages: 30
name: muzi
blablablabla
blablablabla
blablablabla
messages: 20
name: puzi
blablablabla
blablablabla
blablablabla
.
.
.

我想做的是给grep名字和消息(每次消息与他后面出现的名字相关时)

并将其设置为数据(开关名称和消息),例如键值对,因此我将

代码语言:javascript
复制
Data = [
"muzi": 30
"puzi": 20
]

就这样一个。这是我在powershell中可以轻松完成的事情,但是如果有人能给我一些帮助的话,我在groovy和id爱方面没有经验。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-22 17:07:21

代码语言:javascript
复制
def lines='''
blablablabla
blablablabla
blablablabla
messages: 30
name: muzi
blablablabla
blablablabla
blablablabla
messages: 20
name: puzi
blablablabla
blablablabla
blablablabla
messages: 11
name: puz
'''.readLines()

//Like this
def messages = lines.findAll{ it=~/^messages:\s+/ }.collect{ it.split(/:\s+/)[1] }
def names = lines.findAll{ it=~/^name:\s+/ }.collect{ it.split(/:\s+/)[1] }
def res = [names,messages].transpose().collectEntries()
println res

//OR like this:
res = lines.findAll{ it=~/^(messages|name):\s+/ }.collect{ it.split(/:\s+/)[1] }.collate(2).collectEntries{[it[1], it[0]]}
println res
票数 1
EN

Stack Overflow用户

发布于 2021-12-22 18:05:24

您可以使用多行regexp,它强制这两行是连续的。查看字符串开头的负面数据。

代码语言:javascript
复制
String txt = """
messages: 300
blablablabla
name: zeny
blablablabla
blablablabla
messages: 30
name: muzi
blablablabla

blablablabla
messages: 20
name: puzi
blablablabla
"""

def res = [:]

txt.findAll(/(?ms)^messages: (\d+)$.^name: (\w+)$/) {match, w1, w2 -> res[w2] = w1}

assert res == [muzi:'30', puzi:'20']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70450529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档