Autohotkey RegExMatch()如何从网站返回字符串中提取第二个条目的balance值
Autohotkey 提取嵌套结构中指定balance字段的实现方案
需求说明
从以下嵌套结构字符串中,提取列表第二个条目对应的balance字段值(示例目标值为20.0):
([{'currency': 'KRW', 'balance': '10134.93', 'locked': '0.0', 'avg_krw_buy_price': '0', 'modified': False}, {'currency': 'XRP', 'balance': '20.0', 'locked': '0.0', 'avg_krw_buy_price': '508.66', 'modified': False}], {'group': 'default', 'min': 1799, 'sec': 29})
可直接运行的AHK代码
; 原始接口返回字符串 rawStr := "([{'currency': 'KRW', 'balance': '10134.93', 'locked': '0.0', 'avg_krw_buy_price': '0', 'modified': False}, {'currency': 'XRP', 'balance': '20.0', 'locked': '0.0', 'avg_krw_buy_price': '508.66', 'modified': False}], {'group': 'default', 'min': 1799, 'sec': 29})" ; 精准匹配目标值 RegExMatch(rawStr, "O)\{\s*'currency':\s*'XRP'.*?'balance':\s*'\K[^']+", match) ; 输出结果(可替换为后续业务逻辑) MsgBox % "提取结果:" . match.Value
通用适配版(不依赖currency字段值)
如果不需要校验第二个条目的币种类型,仅按列表顺序取第二个字典块的balance值,替换正则部分即可:
RegExMatch(rawStr, "O)\{\s*'currency'.*?\}, \{\s*'currency'.*?'balance':\s*'\K[^']+", match)
核心逻辑说明
- 采用
O)匹配模式,直接返回匹配到的结果对象,无需手动遍历捕获组 - 用非贪婪匹配
.*?避免跨字典匹配到错误字段 - 用
\K零宽断言丢弃前置匹配内容,仅捕获balance字段的实际值,无需额外提取捕获组内容 - 用
[^']+匹配字段值,自动截断到单引号结束位置,不会包含多余字符 - 加入
\s*兼容原始字符串中冒号前后的任意空格分隔情况,避免因格式偏移匹配失败
常见踩坑点
- 若使用贪婪匹配
.*,会导致匹配到整个字符串最后一个balance字段的值,不符合需求 - 若未使用
\K,直接写捕获组('balance':\s*'([^']+)'),需要手动取捕获组的对应索引,容易因匹配顺序搞错取值 - 注意AHK 2.0版本中MsgBox的调用格式需调整为
MsgBox("提取结果:" . match.Value),正则部分逻辑完全通用
内容的提问来源于stack exchange,提问作者ggo
相关产品推荐
相关产品推荐

