正则表达式捕获多个事件,并将它们放在组中
问题描述:
我有以下行字符串“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,更多的东西}
答
您可以稍微修改重新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()
法):
见another Groovy demo。这里,it[1]
将访问捕获组1中的内容,并且.collect
将遍历所有匹配。
这是真的**你必须解析的文本吗?有人看到了JSON格式,并决定编写自己的不可解析的变体? –
@tim_yates是的,不幸的是它是需要被解析的文本。 – cubeb