Groovy为每个匹配项返回一个数组

时间:2019-04-16 12:14:52

标签: java regex groovy

我的日志中有以下格式的字符串:output:server-01-logs_20190401162454output:database-01-logs_20190401162454。我需要在下划线(_)之前匹配字符串,即 output:database-01-logs output:server-01-logs 。所以我使用以下模式:

result = text =~ /output:([^_]+)/
Iterator<String> elements = result.iterator();
while (elements.hasNext()) {
  System.out.println(elements.next());
}

但是我得到的结果是每个字符串的匹配数组,如下所示

[output:server-01-logs, server-01-logs]
[output:database-01-logs, database-01-logs]

我期望的是

output:server-01-logs
output:database-01-logs

有人可以帮我解决我在这里所缺少的吗?

1 个答案:

答案 0 :(得分:4)

您可以删除捕获组(因为看起来您不想获得任何子匹配项)并使用

def text = "output:server-01-logs_20190401162454, output:database-01-logs_20190401162454"
def result = (text =~ /output:[^_]+/).collect()

请参见this Groovy demo

或者,如果要保留捕获组,请收集组0值:

def text = "output:server-01-logs_20190401162454, output:database-01-logs_20190401162454"
def result = (text =~ /output:([^_]+)/).collect { it[0] }
print(result)

输出:

[output:server-01-logs, output:database-01-logs]

请参见Groovy demo

如果需要 captured 值,请将it[0]替换为it[1]