首页 > 解决方案 > Groovy - 如何用正则表达式替换字符串中的元素

问题描述

我正在尝试创建一个通用解决方案来增加正则表达式作为参数给出的版本号。到目前为止,正则表达式运行良好,但下一部分返回与原始语法相同的语法,这让我现在发疯了。

代码片段:

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作为替代品?

标签: regexgroovy

解决方案


您可以用 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 演示


推荐阅读