如何将指定格式的数组字符串转换为对应数组?
如何将指定字符串转换为数组形式
嘿,我来帮你搞定这个字符串转数组的需求!首先得明确我们要把这个带方括号的字符串转换成什么样的数组——是包含结构化键值对的数组,还是直接把每个键 = 值的片段作为数组元素?我两种情况都给你写个实现示例,用最常用的JavaScript和Python来演示:
情况1:转换成包含键值对对象的数组(结构化数组)
这种方式会把每个属性拆分成键和值,方便后续的逻辑处理,还能自动转换值的类型(比如数字转成Number类型)。
JavaScript实现
const inputStr = "[ name = preload cacheHits = 0 onDiskHits = 0 inMemoryHits = 0 misses = 0 size = 0 averageGetTime = 0.0 evictionCount = 0 ]"; // 1. 清理字符串:去掉首尾方括号和多余空格 const cleanedStr = inputStr.trim().slice(1, -1).trim(); // 2. 用正则匹配所有"键 = 值"格式的片段 const keyValueMatches = cleanedStr.match(/(\w+)\s*=\s*(\S+)/g) || []; // 3. 转换成键值对对象数组,同时处理值的类型 const resultArray = keyValueMatches.map(pair => { const [key, rawValue] = pair.split(/\s*=\s*/); // 判断值的类型,数字转成Number,字符串保留原格式 const value = isNaN(Number(rawValue)) ? rawValue.trim() : Number(rawValue); return { key: key.trim(), value }; }); console.log(resultArray);
输出结果会是:
[ { key: 'name', value: 'preload' }, { key: 'cacheHits', value: 0 }, { key: 'onDiskHits', value: 0 }, { key: 'inMemoryHits', value: 0 }, { key: 'misses', value: 0 }, { key: 'size', value: 0 }, { key: 'averageGetTime', value: 0 }, { key: 'evictionCount', value: 0 } ]
Python实现
import re input_str = "[ name = preload cacheHits = 0 onDiskHits = 0 inMemoryHits = 0 misses = 0 size = 0 averageGetTime = 0.0 evictionCount = 0 ]" # 1. 清理字符串 cleaned_str = input_str.strip()[1:-1].strip() # 2. 匹配所有键值对 key_value_pairs = re.findall(r'(\w+)\s*=\s*(\S+)', cleaned_str) # 3. 转换成字典列表,处理值的类型 result_array = [] for key, raw_value in key_value_pairs: # 尝试转换为数字(先浮点再整数) try: value = float(raw_value) if value.is_integer(): value = int(value) except ValueError: value = raw_value result_array.append({"key": key, "value": value}) print(result_array)
情况2:直接将每个"键 = 值"片段作为数组元素
如果你只需要把原字符串里的每个属性片段拆分出来组成数组,不需要结构化处理,那实现会更简单:
JavaScript实现
const inputStr = "[ name = preload cacheHits = 0 onDiskHits = 0 inMemoryHits = 0 misses = 0 size = 0 averageGetTime = 0.0 evictionCount = 0 ]"; const cleanedStr = inputStr.trim().slice(1, -1).trim(); // 直接匹配所有"键 = 值"的片段组成数组 const resultArray = cleanedStr.match(/\w+\s*=\s*\S+/g) || []; console.log(resultArray);
输出结果:
[ 'name = preload', 'cacheHits = 0', 'onDiskHits = 0', 'inMemoryHits = 0', 'misses = 0', 'size = 0', 'averageGetTime = 0.0', 'evictionCount = 0' ]
Python实现
import re input_str = "[ name = preload cacheHits = 0 onDiskHits = 0 inMemoryHits = 0 misses = 0 size = 0 averageGetTime = 0.0 evictionCount = 0 ]" cleaned_str = input_str.strip()[1:-1].strip() result_array = re.findall(r'\w+\s*=\s*\S+', cleaned_str) print(result_array)
内容的提问来源于stack exchange,提问作者skr
相关产品推荐
相关产品推荐

