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

如何优化正则表达式避免方括号内内容被多次匹配?

正则优化:匹配含列表的key:value项不拆分

我需要匹配字符串中以“, ”分隔的key:value数据,但遇到形如Mylist:[data1, data2, data3]的列表格式时,当前正则(?<=(: *)\[).*?(?=, )|(?<=, +(?=[^ \r\n]))(?:.*?(?=, )|[^\r\n\[\]]+?(?=\])|[^\r\n]+\](?= *\]))会将列表拆分为多个匹配项。希望优化正则,把包含[]的整个列表项作为单个匹配结果。

完整输入

MyString=[XXXXXX:XX   XX   XX   XX, XXXXX:332.83, XXXXX:XXX-XX-XX XX:XX:XX, XXXX:0.0, XXXX:2, XXXX:0, XXXX:-256, XXXX:5, XXXX:136935, XXXX:0, XXXX:XX XXX XXX, XXXX:0.5, XXXXX:true, XXXX:0.509375, XXX:0.0, 2022-09-17,XXXXX:1, list1:[2000-00-00 00:00, 2022-11-16 15:29, 2022-11-16 15:29], list2:[2000-00-00 00:00, 2022-11-16 15:29, 2022-11-16 15:29], ]

期望匹配结果

match 1 = XXXXXX:XX   XX   XX   XX
match 2 = XXXXX:332.83
...
match x =2022-09-17,XXXXX:1
match y =list1:[2000-00-00 00:00, 2022-11-16 15:29, 2022-11-16 15:29]
match z =list2:[2000-00-00 00:00, 2022-11-16 15:29, 2022-11-16 15:29]

优化后的正则表达式

(?<=, |\[)(?:[^\s,\[]+:\[(?:[^]]+)\]|[^,]+?)?(?=, |$|\])

正则说明

  • (?<=, |\[):正向预查,确保匹配项起始于, 或[之后,定位正确的匹配起点
  • [^\s,\[]+:\[(?:[^]]+)\]:匹配完整列表项,[^\s,\[]+匹配列表的key部分,\[(?:[^]]+)\]捕获从[到]的所有内容(包含内部逗号)
  • |:分支匹配,兼容普通项场景
  • [^,]+?:匹配不含逗号的普通项,非贪婪模式避免过度匹配
  • (?=, |$|\]):正向预查,确保匹配项结束于, 、字符串末尾或]之前,保证项的完整性

该正则会将每个完整的key:value项(包括列表格式)作为单个匹配结果,不会拆分列表内部内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 21:35:14