как увеличить нумерацию c и строку alphanumeri c из списка с помощью python? - PullRequest
0 голосов
/ 02 февраля 2020

заданный список n = ['4276-4279', 'I69-I71', 'V104-V112', '11528']

из приведенного выше списка, я хочу сопоставить строку с дефисом и увеличьте значение numberri c или alphanumeri c до заданного диапазона. до сих пор я мог сопоставить только значение с помощью RE. p = re.compile ('([\ d] | [AZ \ d] {1,}) [-]')

Ожидаемый результат: ['4276', '4277', '4278', «4279», «I69», «I70», «I71», «V104», «V105», «V106», «V107», «V108», «V109», «V110», «V111», «V112 ',' 11528 ']

Спасибо.

Ответы [ 2 ]

1 голос
/ 02 февраля 2020

Вы можете обработать каждый элемент в вашем списке, проверяя, соответствует ли он шаблону

^([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']
0 голосов
/ 02 февраля 2020
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)

Этот код работал на меня для вашего ввода. Пожалуйста, попробуйте и скажите мне, если это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...