Результат указанного c элементов списка в списке - PullRequest
0 голосов
/ 16 января 2020

У меня есть строка, которая включает символы верхнего регистра и подстроки, которые имеют форму целого числа в скобках (например: (1)).

Пример строки:

in_str = '(3)(3)ABC(2)XY(5)PQRSTX(9)(2)TWO(7)SEVEN'

Я извлек подстроки во вложенный список, где каждый подсписок содержит целое число и длину символов в верхнем регистре между ним и следующей подстрокой.

Пример списка:

in_lst = [[3, 0], [3, 3], [2, 2], [5, 6], [9, 0], [2, 3], [7, 5]]

Я хотел бы умножить подсписки на их первые элементы, которые напрямую связаны (без строчных букв между ними в строке ) и замените использованные подсписки пустыми (потребуется для задачи), за исключением одного для каждого раздела, который содержит конечный результат для данного раздела.

Пример желаемого результата:

out_lst = [[], [9, 3], [2, 2], [5, 6], [], [18, 3], [7, 5]]

Пример выходного списка в строке:

out_str = '(9)ABC(2)XY(5)PQRSTX(18)TWO(7)SEVEN'

К сожалению, я немного заблудился с точки зрения правильного подхода, поэтому у меня нет не удалось создать код, который возвращает по крайней мере примерно выходной список oximate, так что любая помощь или совет относительно этого приветствуются!

1 Ответ

1 голос
/ 16 января 2020

Вы можете использовать re.findall, чтобы найти цифры и букву после них, затем перебрать их и преобразовать в нужную форму

import re
split_lst = re.findall(r'\((\d)\)([A-Z]*)', in_str)
print (split_lst)
#[('3', ''), ('3', 'ABC'), ('2', 'XY'), ('5', 'PQRSTX'), ('9', ''), ('2', 'TWO'), ('7', 'SEVEN')]

out_str = ''.join(e for (n,s) in split_lst for e in (('(%s)' % (int(n)*len(s))), s) if s)
print (out_str)
#'(9)ABC(4)XY(30)PQRSTX(6)TWO(35)SEVEN'
...