基于指定名称与循环数生成序列列表的技术实现咨询
实现方案
核心需求
已知两个YAML变量:
name: "abc232323defg10" cycle: "4"
需要生成包含cycle个元素的列表,元素从name末尾的最大数值开始依次递减,同时保留name末尾可能存在的前缀字母(如t1中的t)。最终输出示例:
list: - abc232323defg10 - abc232323defg9 - abc232323defg8 - abc232323defg7
实现步骤
- 提取变量值:从YAML中读取
name字符串和cycle数值(需转为整数)。 - 拆分name结构:用正则表达式拆分
name为三部分:- 固定前缀(如
abc232323defg) - 可选字母后缀前缀(如
t1中的t,纯数字后缀则为空) - 末尾数字(如
10)
推荐正则:^(.*?)([a-zA-Z]?)(\d+)$,通过分组分别捕获这三部分。
- 固定前缀(如
- 生成数字序列:从提取到的最大数字开始,生成
cycle个连续递减的数字(范围是max_num到max_num - cycle + 1)。 - 拼接列表元素:将固定前缀+可选字母+每个数字拼接,组成最终列表。
代码示例(Python)
import re import yaml # 读取YAML变量 yaml_str = """ name: "abc232323defg10" cycle: "4" """ data = yaml.safe_load(yaml_str) name = data["name"] cycle = int(data["cycle"]) # 正则拆分name match = re.match(r'^(.*?)([a-zA-Z]?)(\d+)$', name) if not match: raise ValueError("name格式不符合要求,末尾需包含数字") prefix = match.group(1) letter = match.group(2) max_num = int(match.group(3)) # 生成数字序列 num_sequence = range(max_num, max_num - cycle, -1) # 拼接列表 result_list = [f"{prefix}{letter}{num}" for num in num_sequence] # 输出YAML格式结果 print(yaml.dump({"list": result_list}, sort_keys=False))
关键说明
- 正则
^(.*?)([a-zA-Z]?)(\d+)$兼容多种末尾格式:纯数字(如88)、字母+数字(如t1、E9)。 - 基于题目给定的前置条件,无需额外处理
cycle大于最大数字的情况。 - 列表元素顺序可根据需求调整(题目说明顺序无关)。
内容的提问来源于stack exchange,提问作者LJS
相关产品推荐
相关产品推荐

