如何从参数化字符串中提取参数名?Python标准库有没有对应实现?
实现方案
可以直接复用Python标准库string.Template内置的正则匹配逻辑,不需要自行编写正则校验变量名合法性,符合你的需求:
import string def get_params(param_str: str) -> tuple[str, ...]: template = string.Template(param_str) params = [] seen = set() # 遍历所有匹配结果,对应分组分别为:转义$、普通命名占位符、大括号包裹占位符、非法格式 for _, named, braced, _ in template.pattern.findall(param_str): if named and named not in seen: seen.add(named) params.append(named) if braced and braced not in seen: seen.add(braced) params.append(braced) return tuple(params)
测试效果
param_str = "I like $thing_I_like and dislike $thing_I_dislike. What does $person_I_like like?" print(get_params(param_str)) # 输出: ('thing_I_like', 'thing_I_dislike', 'person_I_like')
说明
- 该方法直接复用
string.Template内置的标识符校验规则,自动过滤不符合Python变量命名规范的占位符,无需额外校验逻辑 - 同时兼容
$xxx和${xxx}两种模板占位符写法,重复出现的占位符只会返回一次,顺序和首次出现顺序一致
内容的提问来源于stack exchange,提问作者winwin
相关产品推荐
相关产品推荐

