寻求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*(.*?)(?:\[|\{|$)
正则拆解
- 键匹配逻辑:
\[([^\[\]]*)\]:匹配方括号包裹的键,[^\[\]]*确保只捕获方括号内的内容,避免跨括号匹配|{([^{}]*)}:匹配大括号包裹的键,[^{}]*同理确保只捕获大括号内的内容
- 分隔符处理:
:\s*匹配冒号及后续任意数量的空白字符(空格、制表符等) - 值匹配逻辑:
(.*?):非贪婪模式匹配任意字符,确保不会过度匹配到下一个键的内容(?:\[|\{|$):作为匹配终止条件,遇到下一个键的起始符号([或{)或字符串结尾时停止匹配
捕获组说明
- 捕获组1:方括号包裹的键内容(若键用方括号)
- 捕获组2:大括号包裹的键内容(若键用大括号)
- 捕获组3:对应的值内容
实际使用时,只需将非空的键捕获组(组1或组2)与组3组合,即可得到完整的键值对。
内容的提问来源于stack exchange,提问作者rajat
相关产品推荐
相关产品推荐

