You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Groovy中提取字符串括号内内容并转为数组的实现方法

Groovy提取字符串中所有方括号内内容的实现方法

需求说明

从任意格式的字符串中,提取所有被方括号[]包裹的内容,无论方括号数量多少,最终将这些内容存入数组,忽略方括号外的其他文本。

实现方案

核心思路是利用正则表达式的非贪婪匹配结合Groovy的findAll方法,精准捕获每个方括号内的内容:

  1. 正则表达式:/\[(.*?)\]/

    • \[:匹配左方括号(转义是因为[在正则里是特殊字符)
    • (.*?):非贪婪捕获组,匹配方括号内的任意字符,直到遇到第一个右方括号(避免贪婪匹配把多个连在一起的方括号内容合并)
    • \]:匹配右方括号
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 14:17:38