如何解析字母数字范围字符串并生成所有包含的取值
核心思路
先把输入的字符串拆分成独立条目,区分单个编号和范围编号,再针对范围编号生成所有中间的完整编号,最后把所有结果整合为一个连贯的输出字符串。
具体实现代码
def expand_number_range(input_str): expanded_list = [] # 拆分输入字符串为独立条目,去除每个条目前后的多余空格 entries = [entry.strip() for entry in input_str.split(',')] for entry in entries: if '-' in entry: # 处理范围型条目,拆分起始和结束编号 start_code, end_code = entry.split('-') start_code = start_code.strip() end_code = end_code.strip() # 提取固定字母前缀和数字部分 prefix = start_code[:2] start_num = int(start_code[2:]) end_num = int(end_code[2:]) # 生成范围内所有编号,数字部分补零到3位保证格式统一 for num in range(start_num, end_num + 1): expanded_list.append(f"{prefix}{num:03d}") else: # 单个编号直接加入结果列表 expanded_list.append(entry.strip()) # 用逗号连接成最终的输出格式 return ', '.join(expanded_list) # 测试你的输入案例 input_str = "AB001-AB050, AB055, AB060-AB099" print(expand_number_range(input_str))
输出结果
运行代码后会输出:
AB001, AB002, AB003, AB004, AB005, AB006, AB007, AB008, AB009, AB010, AB011, AB012, AB013, AB014, AB015, AB016, AB017, AB018, AB019, AB020, AB021, AB022, AB023, AB024, AB025, AB026, AB027, AB028, AB029, AB030, AB031, AB032, AB033, AB034, AB035, AB036, AB037, AB038, AB039, AB040, AB041, AB042, AB043, AB044, AB045, AB046, AB047, AB048, AB049, AB050, AB055, AB060, AB061, AB062, AB063, AB064, AB065, AB066, AB067, AB068, AB069, AB070, AB071, AB072, AB073, AB074, AB075, AB076, AB077, AB078, AB079, AB080, AB081, AB082, AB083, AB084, AB085, AB086, AB087, AB088, AB089, AB090, AB091, AB092, AB093, AB094, AB095, AB096, AB097, AB098, AB099
补充说明
- 这个方案严格匹配题目要求:前缀固定为两位字母,数字部分固定三位,所以用
start_code[:2]提取前缀,数字转整数后用num:03d补零格式化,确保编号格式统一 - 如果需要适配不同长度的前缀或数字,只需要调整切片位置和格式化的位数即可
内容的提问来源于stack exchange,提问作者Sagar Chopra

