目前我有字符串行feature/USRSTORY-447-testing-rest-api
我只想提取USRSTORY-447
。
目前我写了一行有效,我得到以下输出:
str.substring(str.indexOf("/") + 1, str.indexOf("-") + 4);
USRSTORY-447
但是将来当USRSTORY -
之后的数字计数超过3位数时,它只会获取前面的那3个数字' - `任何人都可以帮助解决这个问题,这样就不需要改变上面的代码行每次?
答案 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']
}