我有一個包含以下文本的變數:
blablablabla
blablablabla
blablablabla
messages: 30
name: muzi
blablablabla
blablablabla
blablablabla
messages: 20
name: puzi
blablablabla
blablablabla
blablablabla
.
.
.
我想要做的是 grep 名稱和訊息(每次訊息都與他之后出現的名稱相關)
并在資料(開關名稱和訊息)中設定它,例如鍵值對,所以我會有
Data = [
"muzi": 30
"puzi": 20
]
還有一個。這是我可以在 powershell 中輕松完成的事情,但是如果有人可以為我提供一些幫助,我在 groovy 和 id love 方面沒有經驗。
uj5u.com熱心網友回復:
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
uj5u.com熱心網友回復:
您可以使用多行正則運算式,它強制兩行是連續的。查看字串開頭的負數資料。
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']
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/394649.html
