Groovy中提取字符串括号内内容并转为数组的实现方法
Groovy提取字符串中所有方括号内内容的实现方法
需求说明
从任意格式的字符串中,提取所有被方括号[]包裹的内容,无论方括号数量多少,最终将这些内容存入数组,忽略方括号外的其他文本。
实现方案
核心思路是利用正则表达式的非贪婪匹配结合Groovy的findAll方法,精准捕获每个方括号内的内容:
正则表达式:
/\[(.*?)\]/\[:匹配左方括号(转义是因为[在正则里是特殊字符)(.*?):非贪婪捕获组,匹配方括号内的任意字符,直到遇到第一个右方括号(避免贪婪匹配把多个连在一起的方括号内容合并)\]:匹配右方括号
Groovy的
findAll方法:可以直接传入正则,并通过闭包提取捕获组的内容,返回结果就是所需的数组。
完整代码示例
// 测试用的字符串列表 def inputStrings = [ "[G2.49.008][KT2.93.015] [TC-Pay-8.2.1.001_02] [TC-SAM-1.1.017_3][TC-Manage Dress-5.1.1.045_02] [TC-CAR-1.5.892_3] Customer able to find see his avatar", "[G25.495.0058] [KT2.93.015] Verify Create Account link is SSO", "[V2.49.048][KT2.93.015][V4.9.04t] Check Paypal is available", "[P2.49.058] User generate OTP" ] // 遍历处理每个字符串 inputStrings.each { str -> // 提取所有方括号内的内容到数组 def array1 = str.findAll(/\[(.*?)\]/) { matchResult -> matchResult[1] } // 按照预期格式输出 println "array1 = ${array1}" }
运行结果
执行上述代码后,输出与需求完全一致:
array1 = [G2.49.008, KT2.93.015, TC-Pay-8.2.1.001_02, TC-SAM-1.1.017_3, TC-Manage Dress-5.1.1.045_02, TC-CAR-1.5.892_3] array1 = [G25.495.0058, KT2.93.015] array1 = [V2.49.048, KT2.93.015, V4.9.04t] array1 = [P2.49.058]
关键细节
- 无论方括号是连续排列(如
[A][B])还是被空格分隔(如[A] [B]),正则都能正确识别并提取每个内容 - 非贪婪匹配
.*?确保不会把多个方括号内的内容合并(比如避免把[A][B]识别成A][B) findAll方法返回的直接是List类型,可直接作为数组使用(Groovy中List和数组可以无缝转换)
内容的提问来源于stack exchange,提问作者wanderors
相关产品推荐
相关产品推荐

