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

如何用正则捕获字母数字与数值序列并转为数组及对象?

解决从带大括号的字符串生成键值对对象的问题

我来帮你一步步搞定这个需求!你已经能提取大括号里的内容了,接下来的拆分和转换其实很清晰,我用两种常用语言(JavaScript和Python)来举例说明:

核心思路

先提取大括号内的纯字符串,再用正则交替匹配字母序列和带小数点的数字序列,最后把拆分后的数组两两配对成键值对象。


JavaScript 实现

// 原始字符串
const inputStr = "{y12.13bb15.16}";

// 1. 提取大括号内的内容
const innerContent = inputStr.match(/\{(.*?)\}/)[1]; // 得到 'y12.13bb15.16'

// 2. 拆分字母和数字部分
const parts = innerContent.match(/[a-zA-Z]+|\d+\.\d+/g); // 得到 ['y', '12.13', 'bb', '15.16']

// 3. 转换为目标对象
const resultObj = {};
for (let i = 0; i < parts.length; i += 2) {
  resultObj[parts[i]] = parseFloat(parts[i + 1]);
}

console.log(resultObj); // 输出: { y: 12.13, bb: 15.16 }

Python 实现

import re

# 原始字符串
input_str = "{y12.13bb15.16}"

# 1. 提取大括号内的内容
inner_content = re.search(r"\{(.*?)\}", input_str).group(1) # 得到 'y12.13bb15.16'

# 2. 拆分字母和数字部分
parts = re.findall(r"[a-zA-Z]+|\d+\.\d+", inner_content) # 得到 ['y', '12.13', 'bb', '15.16']

# 3. 转换为目标对象
result_obj = {parts[i]: float(parts[i+1]) for i in range(0, len(parts), 2)}

print(result_obj) # 输出: {'y': 12.13, 'bb': 15.16}

正则说明

  • [a-zA-Z]+: 匹配一个或多个大小写字母(对应你的键名,比如y、bb)
  • \d+\.\d+: 匹配带小数点的数字(对应你的数值,比如12.13、15.16,确保至少有一位整数和一位小数)
  • |: 表示“或”逻辑,让正则交替匹配字母序列和数字序列

如果你的键名可能包含其他字符(比如下划线),只需要调整[a-zA-Z]+为[a-zA-Z_]+这类符合需求的规则就行,非常灵活!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:32:07