如何获取符合特定模式的变量及变量集的值?指定模式为"number"
获取特定模式变量值的实现方案
嘿,这个需求挺常见的,我分几种主流编程语言的场景给你详细说说怎么实现:
Python 场景
在Python里,你可以借助全局/局部变量字典(globals() 或 locals())结合字符串匹配或正则表达式来筛选目标变量。
基础匹配(以"number"开头)
比如你定义了几个变量,想把所有以"number"开头的变量值捞出来:
# 测试用变量 number1 = 10 number2 = 20 text_msg = "hello world" number_extra = 30 # 筛选并收集变量 target_vars = {var_name: var_value for var_name, var_value in globals().items() if var_name.startswith("number")} print(target_vars) # 输出结果: {'number1': 10, 'number2': 20, 'number_extra': 30}
精确正则匹配
如果需要更严格的模式(比如"number"后面必须跟数字),可以用re模块做正则匹配:
import re target_vars = {var_name: var_value for var_name, var_value in globals().items() if re.match(r'^number\d+$', var_name)} print(target_vars) # 输出结果: {'number1': 10, 'number2': 20}
Bash 脚本场景
在Shell环境中,你可以利用变量展开语法来筛选特定前缀的变量:
# 先定义几个测试变量 number1=5 number2=15 random_text="test content" # 遍历所有以"number"开头的变量并输出值 for var in "${!number@}"; do echo "变量名: $var,对应值: ${!var}" done
运行后会输出:
变量名: number1,对应值: 5 变量名: number2,对应值: 15
这里${!number@}会自动展开所有以number开头的变量名,${!var}是间接引用变量的值。
JavaScript 场景
全局变量筛选
如果变量是全局作用域的,可以通过全局对象(浏览器是window,Node.js是globalThis)遍历筛选:
// 定义全局变量 let number1 = 100; const number2 = 200; let non_target = "foo"; // 获取全局对象 const globalObj = typeof window !== 'undefined' ? window : globalThis; // 筛选目标变量 const targetVars = {}; for (const key in globalObj) { if (key.startsWith('number')) { targetVars[key] = globalObj[key]; } } console.log(targetVars); // 输出: {number1: 100, number2: 200}
局部变量推荐方案
局部变量没法直接遍历,建议一开始就把变量放到对象里,这样筛选更灵活:
// 把变量统一放在对象中管理 const myVars = { number1: 10, number2: 20, text: "bar" }; // 筛选符合模式的变量 const targetVars = Object.fromEntries( Object.entries(myVars).filter(([key]) => key.startsWith('number')) ); console.log(targetVars); // 输出: {number1: 10, number2: 20}
核心思路总结
不管用哪种语言,核心步骤都是这三步:
- 拿到包含所有目标变量的集合(字典、对象或变量列表)
- 通过字符串匹配或正则表达式筛选出符合"number"模式的变量名
- 间接获取这些变量名对应的具体值
内容的提问来源于stack exchange,提问作者Thanakrit Wongsatit
相关产品推荐
相关产品推荐

