Groovy возвращает массив для каждого совпадения - PullRequest
1 голос
/ 16 апреля 2019

В моих журналах есть строки в следующем порядке output:server-01-logs_20190401162454, output:database-01-logs_20190401162454.Мне нужно сопоставить строку перед подчеркиванием (_), т.е. вывод: database-01-logs и вывод: 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 Ответ

4 голосов
/ 16 апреля 2019

Вы можете удалить группу захвата (так как кажется, что вы не хотите получать какие-либо совпадения) и использовать

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

См. это Groovy демо .

Или, если вы хотите сохранить группу захвата, соберите значения группы 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 .

Если вам нужны захваченные значения , замените it[0] на it[1].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...