Groovy - Как заменить элементы в строке, которые были найдены с помощью регулярного выражения - PullRequest
0 голосов
/ 24 августа 2018

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

Фрагмент кода:

def increase(tag, regex, position){
    tag[position] = (tag[position] as Integer) + 1
    def newTag = tag[0].replaceAll(regex, ???)
    return newTag
}

Итак, если я приведу эти параметры:

// entry params:
tag = ['1.0.RC119', 1, 0, 119 ]
regex = /^(\d+).(\d+).RC(\d+)/
position = 3

Результат должен быть 1.0.RC120

С этими параметрами:

tag = [ '1.0u2', 1, 0, 2 ]
regex = /^(\d+).(\d+)u(\d+)/
position = 3

Результат должен быть 1.0u3

Что я должен дать replaceAll в качестве замены?

Ответы [ 2 ]

0 голосов
/ 24 августа 2018

Я понял, хотя я думаю, что это немного "грязно":

def increase(tag, regex, position){
    tag[position] = tag[position] + 1
    def newTag = regex.toString().\
                       replace('^', '').\
                       replace('\$', '').\
                       replace('(d+)','@__@')
    tag[1..-1].each {
        newTag = newTag.replaceFirst('@__@', it.toString())
    }
    return newTag
}

Конечно, это не охватит все случаи, но в основном будет работать для меня.

0 голосов
/ 24 августа 2018

Вы можете разбить строку на 1+ цифр и затем чередовать результирующий список с элементами tag и присоединиться, чтобы получить окончательную строку:

List combineList(List one, List two) {
    def result = [one, two].transpose()
    ( result += (one - result*.get(0)) ?: (two - result*.get(1)) ).flatten()
}

def increase(tag, regex, position){
    tag[position] = (tag[position] as Integer) + 1
    return combineList(tag[0].split(/\d+/), tag[1..-1]).join())
}

См. Groovy демо онлайн .

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