Hi @Nick1,
If the email body has always the same format, it could be achieved by using a couple of Compose actions.
I have made the following test.
The trigger is When a new email arrives. Then convert the email body from HTML to text.
Add action Compose2 to return the start position of the actual subscription name, input the following code
add(indexOf(body('Html_to_text'),'Subscription Actual Spendings'),29)
Add action Compose3 to get the ending position of the spending:
indexOf(body('Html_to_text'),'We hope you enjoyed receiving this message.')
Add action Compose4 to return all info about subscription name and spending:
substring(body('Html_to_text'),outputs('Compose_2'),sub(outputs('Compose_3'),outputs('Compose_2')))
Add Compose5, split each subscription with the character “NZD”:
split(outputs('Compose_4'),'NZD')
Add Compose6, get the first subscription name and spending then separate the name and spending with the blank:
split(first(outputs('Compose_5')),' ')
Add Compose7(NameOfSubscription1) to return the name of the subscription1:
first(outputs('Compose_6'))
Add Compose8(Subscription1 spending) to return the spending of the subscription1:
first(skip(outputs('Compose_6'),1))
The same with other two subscriptions, please take it for a reference and try it on your side. After getting the subscription name and spending, you could insert the outputs to SharePoint list.
Image for your reference:


Functions reference for WDL:
https://docs.microsoft.com/en-us/azure/logic-apps/workflow-definition-language-functions-reference
Best regards,
Mabel Mao