如何在groovy中的两个分隔符之间提取字符串?

时间:2018-02-27 12:20:28

标签: groovy

目前我有字符串行feature/USRSTORY-447-testing-rest-api

我只想提取USRSTORY-447

目前我写了一行有效,我得到以下输出:

str.substring(str.indexOf("/") + 1, str.indexOf("-") + 4);

USRSTORY-447

但是将来当USRSTORY -之后的数字计数超过3位数时,它只会获取前面的那3个数字' - `任何人都可以帮助解决这个问题,这样就不需要改变上面的代码行每次?

2 个答案:

答案 0 :(得分:2)

您可以使用StringGroovyMethods.find(regex)提取您感兴趣的部分,并使用正则表达式表达:

def str = "feature/USRSTORY-447-testing-rest-api".find(/USRSTORY-\d+/)
assert str == 'USRSTORY-447'

它从给定的字符串中提取USRSTORY-447

你甚至可以稍微概括一下 - 假设USRSTORY可能被任何大写的字符串替换,下面的表达式将处理这种情况:

"feature/USRSTORY-447-testing-rest-api".find(/([A-Z]+)-\d+/)

答案 1 :(得分:2)

我想用regexp提取这些信息。它更灵活,你也可以获得名字所需的所有其他东西。 E.g。

def s = 'feature/USRSTORY-447-testing-rest-api'

def matches = s =~ /(?<type>.*?)\/(?<ticketid>[A-Z]+-\d+?)-(?<desc>.*)/

if (matches) { 
    def result = ["type", "ticketid", "desc"].collectEntries{[it, matches.group(it)]}
    println result.inspect()
    // => ['type':'feature', 'ticketid':'USRSTORY-447', 'desc':'testing-rest-api']
}