Ребят у меня такой случай:

def AllEnviroments = ['company-test', 'MYTEST-1234', 'company-somethingelse-something']
def EnviromentChoices = (AllEnviroments =~  /company-.*|MYTEST/).findAll().collect().sort()

Как исключить из этого регулярного выражения строки, в которых есть «что-то» или что-то еще, что будет на своем месте внутри него, чтобы он печатал только тест компании и DPDHLPA

Ожидаемый результат : ПЕЧАТЬ компания-тест и mytest-1234 и НЕ "компания-что-то"

1
WhoAmI 16 Сен 2021 в 14:19

2 ответа

Лучший ответ

Ты можешь использовать

def AllEnviroments = ['company-test', 'MYTEST-1234', 'company-somethingelse-something']
def EnviromentChoices = AllEnviroments.findAll { it =~ /company-(?!something).*|MYTEST/ }.sort()
print(EnviromentChoices)
// => [MYTEST-1234, company-test]

Обратите внимание, что .findAll запускается непосредственно в массиве строк, где регулярное выражение обновляется с отрицательным опережением, чтобы избежать сопоставления строк, в которых something идет непосредственно после company-.

См. демонстрацию Groovy.

1
Wiktor Stribiżew 16 Сен 2021 в 12:57

Попробуйте: '(.*?[^\\])'(?=.*something)

Демо

0
TheRight 16 Сен 2021 в 11:56