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

如何使用Python正则表达式匹配指定关键词提取对应版本号?

Python正则提取组件版本号实现方案

原代码问题说明

你写的正则规则sys_0_num\[version]:\s*(\d+)和实际字符串结构完全不匹配:实际字符串中组件名和version字段是嵌套在不同层级的大括号内,不存在sys_0_num[version]这种格式的内容,因此无法匹配到结果。

正则实现方案

正则规则设计

我们可以通过两个捕获组分别匹配组件名和对应的version值,规则如下:

r'"(\w+_num)"\s*:\s*{[^}]*"version":\s*(\d+)'

规则说明:

  • "(\w+_num)":捕获所有以_num结尾的组件名(匹配sys_0_num、sys_1_num、cha_num这类格式的字段)
  • \s*:\s*{:匹配组件名后的冒号和左大括号,兼容任意空白/缩进
  • [^}]*:匹配当前组件大括号内除右大括号外的所有内容,跳过rel_num等其他无关字段
  • "version":\s*(\d+):捕获version字段对应的数字值

完整可运行代码

import re

# 你的原始字符串
str1 = """show.sh
 {
   "sys_0_num" :  {
   "rel_num": 2.3,
   "version": 14891
 },
   "sys_1_num" :  {
   "rel_num": 2.3,
   "version": 14891
 }

  "cha_num" :  {
  "rel_num": 2.3,
  "version": 571,
  "model":1487
 }

}"""

# 匹配所有组件和对应version
result = re.findall(r'"(\w+_num)"\s*:\s*{[^}]*"version":\s*(\d+)', str1)

# 按预期格式输出
for component, version in result:
    print(f"{component} version: {version}")

输出结果

sys_0_num version: 14891
sys_1_num version: 14891
cha_num version: 571

更稳妥的备选方案(JSON解析)

你的字符串除了开头的show.sh行之外是标准JSON格式,用JSON解析的方式兼容性更强,不会因为缩进、换行变化导致匹配失败,实现代码如下:

import json

# 去掉开头第一行的show.sh,取后面的JSON内容
json_content = str1.split('\n', 1)[1]
data = json.loads(json_content)

# 遍历输出
for key in data:
    if key.endswith('_num'):
        print(f"{key} version: {data[key]['version']}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 11:54:04