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

Python正则表达式解析含多段版本号的键值对字符串时的取值问题求助

Python正则表达式解析含多段版本号的键值对字符串时的取值问题求助

我最近在用Python正则处理一个键值对格式的字符串时遇到了麻烦,想请教大家怎么解决😅

我的目标字符串是这样的:

payload = "status=0/eStopStatus=2/version=1.0.16/runTime=005320"

我原本写了两段正则来分别提取变量名和对应的值:

import re

payload = "status=0/eStopStatus=2/version=1.0.16/runTime=005320"
variables = re.findall(r'([\w]+)=', payload)
values = re.findall(r"[-+]?(?:\d*\.*\d+)", payload)

变量名的提取是正常的,得到的结果是:

['status', 'eStopStatus', 'version', 'runTime']

但问题出在值的提取上——因为version的值是1.0.16,里面有两个小数点,导致我的正则把它拆成了两部分,最终得到的值列表是:

['0', '2', '1.0', '.16', '005320']

我对正则的语法细节一直有点懵,实在搞不定这个问题,有没有大佬能帮忙指点一下?


解决方案推荐

其实不用分开提取变量和值,我们可以一步到位匹配完整的键值对,这样更简单也不容易出错:

方法1:直接匹配键值对

用这个正则可以一次性把每个键和对应的值都抓出来:

kv_pairs = re.findall(r'(\w+)=([^/]+)', payload)

运行后得到的结果是:

[('status', '0'), ('eStopStatus', '2'), ('version', '1.0.16'), ('runTime', '005320')]

如果需要把它们转成字典也很方便:

result_dict = dict(kv_pairs)
# 结果:{'status': '0', 'eStopStatus': '2', 'version': '1.0.16', 'runTime': '005320'}

正则解释:

  • (\w+):匹配变量名,也就是字母、数字和下划线组成的字符串
  • =:匹配键和值之间的等号
  • ([^/]+):匹配除了/之外的所有字符(因为/是键值对的分隔符),这样不管值里有几个小数点或者其他合法字符,都能完整匹配到

方法2:调整取值的正则(如果一定要分开提取)

如果你还是想保持分开提取变量和值的逻辑,可以把取值的正则改成下面这样:

values = re.findall(r"[-+]?(?:\d+(?:\.\d+)*)", payload)

运行后得到的值列表就是正确的:

['0', '2', '1.0.16', '005320']

正则解释:

  • [-+]?:可选的正负号
  • \d+:至少一个数字(保证不会以小数点开头)
  • (?:\.\d+)*:可以重复任意多次「小数点+数字」的组合,这样就能匹配像1.0.16这种多段的版本号格式

这样两种方法都能解决你遇到的问题,推荐第一种,逻辑更清晰也更通用~

备注:内容来源于stack exchange,提问作者ADL

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 14:35:30