正则表达式捕获多个事件,并将它们放在组中

问题描述:

我有以下行字符串“winline”可能会出现一次或多次(或没有),我不知道它会出现在行中多少次。正则表达式捕获多个事件,并将它们放在组中

有没有一种方法可以捕捉到本文中出现的所有'winline'?我正在使用Groovy并尝试匹配winline,并且它捕获所有内容,但每个都被声明为组1.我希望能够逐组地捕获它们。

实施例使用下面的上行此正则表达式:winline \ “:([0-9] +)

def matcher 
def winningSym = /winline\":([0-9]+)/ 

if((matcher = line =~ winningSym)){ 
    println matcher[0][1] // get 5 which is right 
    println matcher[1][1] // expect 4 but get IndexOutOfBounds Exception 
} 

线:

{” ID “:1,” winline “5,” 赢“:50000,一些随机的文字, ”winline“:4, 更随机的文字, ”winline“:7,更多的东西}

+0

这是真的**你必须解析的文本吗?有人看到了JSON格式,并决定编写自己的不可解析的变体? –

+0

@tim_yates是的,不幸的是它是需要被解析的文本。 – cubeb

您可以稍微修改重新GEX使用积极的回顾后,用一个简单的代码:

def winningSym = /(?<=winline":)[0-9]+/ 
String s = """{"Id":1,"winline":5,"Winnings":50000, some random text, "winline":4, more random text, "winline":7, more stuff}""" 
def res = s.findAll(winningSym) 
println(res) 

Groovy demo,输出:[5, 4, 7]

要使用您正则表达式和收集组1倍的值的匹配使用.collect(如匹配器支持iterator()法):

​​3210

another Groovy demo。这里,it[1]将访问捕获组1中的内容,并且.collect将遍历所有匹配。