如何使用python从列表中递增数字和字母数字字符串?
给定列表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'] 多谢各位如何使用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
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']
@不用担心,我很高兴能帮上忙。