Регулярные выражения излишни для этой проблемы, как вы ее заявили.
text.split()
и join
элементов перед двумя последними лучше подходят для этого.
lines = [ "REVENUE 9,000,000 900,000",
"COST OF SALES 900,000 900,000",
"GROSS PROFIT (90%; 2016 - 90%) 900,000 900,000" ]
out = []
for line in lines:
parts = line.split()
if len(parts) < 3:
raise InputError
if len(parts) == 3:
out.append(parts)
else:
out.append([' '.join(parts[0:len(parts)-2]), parts[-2], parts[-1]])
out
будет содержать
[['REVENUE', '9,000,000', '900,000'],
['COST OF SALES', '900,000', '900,000'],
['GROSS PROFIT (90%; 2016 - 90%)', '900,000', '900,000']]
Если текст метки нуждается в дальнейшем извлечении, вы можете использовать регулярные выражения или просто посмотреть на элементы в parts[0:len(parts)-2]
и обработать их на основе слов и цифресть.