Как вернуть все элементы списка до и включая совпадение с регулярным выражением? - PullRequest
1 голос
/ 25 марта 2020

Я хочу разбить список на различные подсписки. Список содержит два типа элементов: «цвета» и «идентификаторы цвета». Количество цветовых элементов между идентификаторами цветов варьируется:

colors = ['red', 'blue' ,'green', 'DocJ20031212doc1223', 'pink', 'yellow', 'DocNY20021212doc1212'] 

Я хочу, чтобы каждый подсписок содержал все цвета перед идентификатором цвета и идентификатором цвета. Я попытался добавить элементы в новый список, основанный на регулярном выражении, пробуя разные индексы и если / если не комбинации. После тщательного исследования, это лучшее, что я придумал:

colors_sorted = []

for i in colors:
    if re.search("Doc[a-zA-Z 0-9]{16}",i) or len(colors_sorted) == 0:
        colors_sorted.append([i])
    else:
        colors_sorted[-1].append(i)
print (colors_sorted)

Однако, это генерирует новый список, который начинается с color-ID, в то время как я хочу, чтобы color-ID был последним элементом каждый подсписок.

Мой вывод:

[['red', 'blue', 'green'], ['DocJ20031212doc1223', 'pink', 'yellow'], ['DocNY20021212doc1212']]

1 Ответ

0 голосов
/ 25 марта 2020

Мы можем немного изменить ваш подход с помощью вспомогательной переменной для хранения подсписка:

colors_sorted = []
group = []
for i in colors:
    group.append(i)
    if i.startswith("Doc"):
        colors_sorted.append(group)
        group = []
...