Вы можете обработать каждый элемент в вашем списке, проверяя, соответствует ли он шаблону
^([A-Z]*)(\d+)-\1(\d+)$
, т. Е. Необязательная буква, несколько цифр, дефис (-
), буква, повторенная, если она присутствует и, наконец, еще несколько цифр.
Если это так, вы можете сгенерировать range
из 2-й и 3-й групп и добавить первую группу к каждому значению, сгенерированному из этого диапазона:
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']