Вот моя проблема. Ниже приведен список:
a = ['COP' , '\t\t\t', 'Basis', 'Notl', 'dv01', '6m', '9m', '1y',
'18m', '2y', '3y', "15.6", 'mm', '4.6', '4y', '5y', '10', 'mm',
'4.6', '6y', '7y', '8y', '9y', '10y', '20y', 'TOTAL', '\t\t9.2' ]
Я пытаюсь получить некоторые результаты, как этот. Самым важным примечанием являются строки. После первого числа, оканчивающегося на «y» или «m», придет число, только если оно есть в списке. Пример: ('3y', '15 .6 ',' ')
ВЫБОР ВЫБОРА (забудь о структуре, которая является кортежем, просто хочу получить значения)
('6m', '', '')
('9m', '', '')
('1y', '', '')
('18m', '', '')
('2y', '', '')
('3y', '15.6', '')
('4y', '', '')
('5y', '10', '')
('6y', '', '')
('7y', '', '')
('8y', '', '')
('9y', '', '')
('10y', '', '')
('20y', '', '')
Я использовал следующее регулярное выражение, которое должно было вернуть:
- все числа следуют "y" или "m" => (\ b \ d + [ym] \ b)
- , а затем любым числом (целое или нет), если оно появляется (означает ноль или более раз) => (\ b [0-9] +. [0-9] \ b)
Вот что я сделал, используя Python3 regex и re.findall (), но все еще не получил результат
rule2 = re.compile(r"(\b\d+[ym]\b)(\b[0-9]+.*[0-9]*\b)+")
a_str = " ".join(a)
OUT2 = re.findall(rule2, a_str)
print(OUT2)
# OUT2 >>[]
Почему я не получаю правильный результат?