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

如何用正则表达式匹配多行文本中最后一组键值对?

更通用优雅的正则实现方案

你的需求是定位JSON-like结构中最后一组键值对的特定位置(键后缀或值前缀),原正则依赖键结尾是00",通用性不足,以下是几种更通用的实现方式:

1. 匹配最后一个键值对的键后缀位置(即"xxx" : 之后)

使用带正向预查的正则,不依赖键的具体内容,只要符合"键" : 的格式即可:

/"[^"]+" : (?=(?:(?!:"[^"]+" : ).)*}$/s
  • 解释:
    • "[^"]+" : :匹配任意合法的键格式(键可以是任意非引号字符)
    • (?=...):正向预查,确保当前位置之后的内容直到}结尾,不再出现"键" : 的格式,以此确认这是最后一个键值对
    • s修饰符:让.匹配换行符,适配多行文本

如果你的键固定是数字,也可以把[^"]+换成\d+,更精准:

/"\d+" : (?=(?:(?!:"\d+" : ).)*}$/s

2. 匹配最后一个键值对的值前缀位置(即值之前)

可以直接基于上面的正则调整,或者匹配最后一个键值对的整体后定位:

/(?<="[^"]+" : )(?:(?!,).)*(?= *}$)/s

这个正则会直接捕获最后一个键值对的值,你可以根据需要调整捕获组来定位位置。

更可靠的替代方案:用JSON解析器处理

如果这段内容是标准JSON,不建议用正则,直接用对应语言的JSON解析工具更可靠(比如JavaScript的JSON.parse、Python的json模块):

  1. 解析整个JSON对象
  2. 提取Values对应的对象
  3. 获取该对象的最后一组键值对(比如把键转为数组取最后一个,再拿到对应值)

比如JavaScript示例:

const data = JSON.parse(yourString);
const values = data.Values;
const keys = Object.keys(values);
const lastKey = keys[keys.length - 1];
const lastValue = values[lastKey];
// 此时lastKey就是"49200",lastValue就是6,可直接定位操作

这种方法完全避免了正则的局限性,比如键或值中包含特殊字符的情况,正则容易出错,而JSON解析器能完美处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 08:48:21