如何使用python从列表中递增数字和字母数字字符串?

如何使用python从列表中递增数字和字母数字字符串?,python,list,increment,alphanumeric,hyphen,Python,List,Increment,Alphanumeric,Hyphen,给定列表n=['4276-4279','I69-I71','V104-V112','11528'] 从上面的列表中,我想用连字符匹配字符串,并将数字或字母数字值增加到给定的范围。 到目前为止,我只能使用RE匹配值。p=重新编译('([\d]|[A-Z\d]{1,})[-]') 预期输出:['4276','4277','4278','4279','I69','I70','I71','V104','V105','V106','V107','V108','V109','V110','V111','V1

给定列表n=['4276-4279','I69-I71','V104-V112','11528']

从上面的列表中,我想用连字符匹配字符串,并将数字或字母数字值增加到给定的范围。 到目前为止,我只能使用RE匹配值。p=重新编译('([\d]|[A-Z\d]{1,})[-]')

预期输出:['4276','4277','4278','4279','I69','I70','I71','V104','V105','V106','V107','V108','V109','V110','V111','V112','11528']

多谢各位

import re
n = ['4276-4279', 'I69-I71', 'V104-V112', '11528']
big_list=[]
for item in n:
    print(item)
    if '-' in item:
        part1,part2=item.split("-")

        if part1.isnumeric() and part2.isnumeric():
            big_list.extend([x for x in range(int(part1),int(part2))])
            continue
        if part1.isalnum() and part2.isalnum():
            list1=re.findall(r"[^\W\d_]+|\d+", part1)
            list2=re.findall(r"[^\W\d_]+|\d+", part2)
            print(list1,list2)
            temp_list=[]
            for i in range(int(list1[1]),int(list2[1])):
                temp_list.append(list1[0]+str(i))
            big_list.extend(temp_list)
    else:
        if item.isnumeric():
            big_list.append(int(item))
        else:
            big_list.extend(item)

print(big_list)
这段代码为我提供了你的输入。
请尝试告诉我它是否有效。

您可以处理列表中的每个元素,看看它是否与模式匹配

^([A-Z]*)(\d+)-\1(\d+)$
i、 e.可选字母、一些数字、连字符(
-
),如果字母存在,则重复该字母,最后再重复一些数字

如果是,您可以从第二组和第三组生成一个
范围
,并将第一组前置到从该范围生成的每个值:

import re

lst = ['4276-4279', 'I69-I71', 'V104-V112', '11528']
new = []
for l in lst:
    m = re.match(r'^([A-Z]*)(\d+)-\1(\d+)$', l)
    if m:
        new += [m.group(1) + str(i) for i in range(int(m.group(2)), int(m.group(3))+1)]
    else:
        new += [l]

print(new)
输出:

['4276', '4277', '4278', '4279', 'I69', 'I70', 'I71', 'V104', 'V105', 'V106', 'V107', 'V108', 'V109', 'V110', 'V111', 'V112', '11528']

@不用担心,我很高兴能帮上忙。