Вы можете использовать комбинацию string.split () и string.strip (), чтобы сначала извлечь каждую строку отдельно.
string = email_content
lines = string.split('\r\n')
lines_stripped = []
for line in lines:
line = line.strip()
if line != '':
lines_stripped.append(line)
Это дает массив, подобный следующему:
['Demand: $41,225 (-47%)', 'Orders: 515 (-53%)', 'Units: 849 (-59%)', 'AOV: $80 (12%)', 'AUR: $49 (30%)', 'Orders with Promo Code: 3%', 'Average Discount: 21%']
Вы также можете добиться того же результата более компактным (питоническим) способом:
lines_stripped = [line.strip() for line in string.split('\r\n') if line.strip() != '']
Получив этот массив, вы используете регулярные выражения, как вы правильно догадались, для извлечения значений.Я рекомендую https://regexr.com/ поэкспериментировать с вашими выражениями регулярных выражений.
После некоторых быстрых экспериментов r'([\S\s]*):\s*(\S*)\s*\(?(\S*)\)?'
должен сработать.
Вот код, который выдает подсказку из ваших строк.созданный выше:
import re
regex = r'([\S\s]*):\s*(\S*)\s*\(?(\S*)\)?'
matched_dict = {}
for line in lines_stripped:
match = re.match(regex, line)
matched_dict[match.groups()[0]] = (match.groups()[1], match.groups()[2])
print(matched_dict)
Это приводит к следующему выводу:
{'AOV': ('$80', '12%)'),
'AUR': ('$49', '30%)'),
'Average Discount': ('21%', ''),
'Demand': ('$41,225', '-47%)'),
'Orders': ('515', '-53%)'),
'Orders with Promo Code': ('3%', ''),
'Units': ('849', '-59%)')}
Вы запросили Единицы, Заказы и Спрос, поэтому вот извлечение:
# Remove the dollar sign before converting to float
# Replace , with empty string
demand_string = matched_dict['Demand'][0].strip('$').replace(',', '')
print(int(demand_string))
print(int(matched_dict['Orders'][0]))
print(int(matched_dict['Units'][0]))
Как вы можете видеть, Demand немного сложнее, потому что он содержит некоторые дополнительные символы, которые Python не может декодировать при преобразовании в int.
Вот окончательный результат этих трех отпечатков:
41225
515
849
Надеюсь, я ответил на ваш вопрос!Если у вас есть еще вопросы о регулярном выражении, я советую вам поэкспериментировать с регулярным выражением, оно очень хорошо построено!
РЕДАКТИРОВАТЬ: похоже, в регулярном выражении есть небольшая проблема, приводящая к тому, что заключительный ')' будет включен впоследняя группа.Это не влияет на ваш вопрос, хотя!