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

如何用正则表达式忽略方括号内匹配,拆分带列表值的字段串?

拆分含嵌套列表的字段字符串解决方案

针对你遇到的问题——需要拆分包含嵌套列表(内部含逗号)的字段字符串,仅识别字段间的分隔逗号,可通过带断言的正则表达式实现,以下是具体方案:

正则表达式

(?<=(?:^|]))\s*,\s*(?=\w+:)

Kotlin 代码示例

fun main() {
    val input = "field1:1234,field2:[[1, 3],[3,4]], field3:[[1, 3],[3,4]]"
    // 编译正则,匹配字段间的分隔逗号
    val fieldSeparator = Regex("(?<=(?:^|]]))\\s*,\\s*(?=\\w+:)", RegexOption.DOT_MATCHES_ALL)
    // 拆分字符串
    val fields = input.split(fieldSeparator)
    
    // 输出结果验证
    fields.forEach { println("字段内容:$it") }
}

运行后输出:

字段内容:field1:1234
字段内容:field2:[[1, 3],[3,4]]
字段内容:field3:[[1, 3],[3,4]]

正则逻辑解释

  1. (?<=(?:^|])):正向零宽后行断言,确保匹配的逗号要么在字符串开头,要么紧跟在列表结束标记]]之后——这就排除了列表内部的逗号。
  2. \s*,\s*:匹配逗号本身,同时兼容逗号前后的任意空白字符(处理示例中field2后逗号带空格的情况)。
  3. (?=\w+:):正向零宽先行断言,确保逗号后面紧跟字段名(字母/数字/下划线组成)加冒号,精准定位字段间的分隔符。

自定义调整说明

如果你的字段名格式不是\w+(比如包含特殊字符),只需修改(?=\w+:)部分即可。例如字段名是field加数字的格式,可改为(?=field\d+:)。

内容的提问来源于stack exchange,提问作者Will

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 23:12:22