如何用正则捕获字母数字与数值序列并转为数组及对象?
解决从带大括号的字符串生成键值对对象的问题
我来帮你一步步搞定这个需求!你已经能提取大括号里的内容了,接下来的拆分和转换其实很清晰,我用两种常用语言(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
相关产品推荐
相关产品推荐

