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

how to increment numeric and alphanumeric string from list using python?

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

从上面的列表中,我想用连字符匹配字符串并将数字或字母数字值增加到给定范围。 到目前为止,我只能使用 RE 来匹配值。 p = re.compile('([\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+)-(\d+)$

即一个可选的字母、一些数字、一个连字符 (-)、重复的字母(如果存在)以及最后一些数字。

如果是,您可以从第 2 组和第 3 组生成 range,并将第一组添加到从该范围生成的每个值:

import re

lst = ['4276-4279', 'I69-I71', 'V104-V112', '11528']
new = []
for l in lst:
    m = re.match(r'^([A-Z]*)(\d+)-(\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']