如何使用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
相关产品推荐
相关产品推荐

