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

寻求RE2兼容正则表达式解析含特殊字符的键值对

用RE2兼容正则解析含特殊字符的键值对

问题背景

需要从连续文本中提取符合以下规则的键值对:

  • 键被方括号[]或大括号{}包裹,后接冒号:
  • 值允许包含任意可打印字符(包括[]{}:)
  • 正则必须兼容RE2(不可使用前瞻/后顾等环视断言)

测试文本:

[key 1]:  value 1[key 2]:  value 2 [with brackets] or {with curly brackets}{key 3}:  value 3 {with curly brackets} or [with square brackets] [key 4]: value 4 with :

期望提取结果:

key 1 , value 1 
key 2 , value 2 [with brackets] or {with curly brackets}
key 3 , value 3 {with curly brackets} or [with square brackets] 
key 4 , value 4 with :

解决方案

使用以下RE2兼容的正则表达式,支持全局匹配:

(?:\[([^\[\]]*)\]|{([^{}]*)}):\s*(.*?)(?:\[|\{|$)

正则拆解

  1. 键匹配逻辑:
    • \[([^\[\]]*)\]:匹配方括号包裹的键,[^\[\]]*确保只捕获方括号内的内容,避免跨括号匹配
    • |{([^{}]*)}:匹配大括号包裹的键,[^{}]*同理确保只捕获大括号内的内容
  2. 分隔符处理::\s*匹配冒号及后续任意数量的空白字符(空格、制表符等)
  3. 值匹配逻辑:
    • (.*?):非贪婪模式匹配任意字符,确保不会过度匹配到下一个键的内容
    • (?:\[|\{|$):作为匹配终止条件,遇到下一个键的起始符号([或{)或字符串结尾时停止匹配

捕获组说明

  • 捕获组1:方括号包裹的键内容(若键用方括号)
  • 捕获组2:大括号包裹的键内容(若键用大括号)
  • 捕获组3:对应的值内容

实际使用时,只需将非空的键捕获组(组1或组2)与组3组合,即可得到完整的键值对。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 12:23:10