You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

字母数字组合标识的连续区间合并技术需求问询

合并连续前缀标识的实现方案

我们有一批由字母前缀加数字组成的标识(格式如A1、AA1、A01、AA01),需要将列表中同前缀且数字连续的标识合并成「前缀首数字-尾数字」的格式,非连续或单条的保持原样。比如输入:

lst = ['RB11', 'RB12', 'A08', 'A09', 'A10', 'SN13', 'A1', 'A2', 'A3', 'A4']

期望输出:

['RB11-12','A08-10','SN13','A1-4']

实现思路

  • 拆分每个标识的字母前缀和数字部分,同时保留数字的原始格式(比如A08的数字是08而非8)。
  • 遍历列表,把同前缀且数字连续的标识归为一组,遇到前缀不同或数字不连续的情况就开启新组。
  • 对每个组进行格式化:单条标识直接保留,多条连续的则拼接成「前缀+起始数字-结束数字」的形式。

代码实现

import re

def merge_continuous_ids(lst):
    if not lst:
        return []
    
    result = []
    # 初始化第一个组的信息
    first_match = re.match(r'([A-Za-z]+)(\d+)', lst[0])
    current_prefix = first_match.group(1)
    current_start_num_str = first_match.group(2)
    current_end_num = int(current_start_num_str)
    current_end_num_str = current_start_num_str
    
    for item in lst[1:]:
        match = re.match(r'([A-Za-z]+)(\d+)', item)
        prefix = match.group(1)
        num_str = match.group(2)
        num = int(num_str)
        
        # 判断是否属于当前连续组
        if prefix == current_prefix and num == current_end_num + 1:
            current_end_num = num
            current_end_num_str = num_str
        else:
            # 处理当前组并加入结果
            if current_start_num_str == current_end_num_str:
                result.append(f"{current_prefix}{current_start_num_str}")
            else:
                result.append(f"{current_prefix}{current_start_num_str}-{current_end_num_str}")
            # 切换到新组
            current_prefix = prefix
            current_start_num_str = num_str
            current_end_num = num
            current_end_num_str = num_str
    
    # 处理最后一个组
    if current_start_num_str == current_end_num_str:
        result.append(f"{current_prefix}{current_start_num_str}")
    else:
        result.append(f"{current_prefix}{current_start_num_str}-{current_end_num_str}")
    
    return result

# 测试示例
test_lst = ['RB11', 'RB12', 'A08', 'A09', 'A10', 'SN13', 'A1', 'A2', 'A3', 'A4']
print(merge_continuous_ids(test_lst))
# 输出: ['RB11-12', 'A08-10', 'SN13', 'A1-4']

关键点说明

  • 正则表达式([A-Za-z]+)(\d+)可以精准拆分任意长度的字母前缀和数字部分,兼容大小写字母(如果需要严格小写或大写,可调整正则为([a-z]+)(\d+)或([A-Z]+)(\d+))。
  • 同时跟踪数字的字符串形式和整数形式:整数用于判断连续性,字符串用于保留原始格式(比如带前导零的数字不会被格式化丢失)。
  • 遍历过程中实时处理完成的组,最后单独处理循环结束后剩余的最后一组,避免遗漏。

内容的提问来源于stack exchange,提问作者Stella H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 22:58:21