Форум сайта python.su
Привет всем.
При парсинге email с содержанием заказа, после очистки мусора, получаю строку типа: “Мешки для мусора Paclan ароматизированные с завязками 35 л 14 шт 2 шт 179,00 ₽ 358,00 ₽ 1 шт Собран”.
Строка содержит:
Название товара - “Мешки для мусора Paclan ароматизированные с завязками 35 л 14 шт”;
Кол-во в покупке - “2 шт”;
Стоимость за единицу - “179,00 ₽”;
Сумму - “358,00 ₽”;
Непонятное количество - “1 шт”;
Метку о статусе - “Собран”.
Помогите разобрать строку на части с целью помещения ее в таблицу.
Офлайн
покажите какой email приходит полностью
Отредактировано xam1816 (Март 15, 2024 22:31:56)
Офлайн
начинать разбор строки слева, не очень надежно, судя по примеру строки.
Начни справа, статус он похоже фиксированные значения имеет, также единицы измерения и валюта Рубль
далее поиском по подстроке штуки, рубли разложи на пять частей
5. Кол-во в покупке - “2 шт”;
4. Стоимость за единицу - “179,00 ₽”;
3. Сумму - “358,00 ₽”;
2. Непонятное количество - “1 шт”;
1. Метку о статусе - “Собран”.
что осталось это название, шестая часть
статусы, единицы измерения сделай в список возможных значений и перебором проверяй в поиске по строке из письма
Офлайн
да проще уже сделать string.split()
ТО есть оно развернет список разделенных через пробел символов а дальше уже
0 - статус
1 и 2 - кол шт
и так далее
Но есть сомнение что там оно будет статично - иначе можно было бы присылать мыло сразу в JSON каком нить
Офлайн
ZerG
да проще уже сделать string.split()ТО есть оно развернет список разделенных через пробел символов а дальше уже 0 - статус1 и 2 - кол шти так далееНо есть сомнение что там оно будет статично - иначе можно было бы присылать мыло сразу в JSON каком нить
Отредактировано sa (Март 16, 2024 21:33:16)
Офлайн
Arik
При парсинге email с содержанием заказа, после очистки мусора, получаю строку типа: “Мешки для мусора Paclan ароматизированные с завязками 35 л 14 шт 2 шт 179,00 ₽ 358,00 ₽ 1 шт Собран”.
Arik
Помогите разобрать строку на части с целью помещения ее в таблицу.
>>> import re >>> >>> text = 'Мешки для мусора Paclan ароматизированные с завязками 35 л 14 шт 2 шт 179,00 ₽ 358,00 ₽ 1 шт Собран' >>> >>> pat = r'^(.+) (\d+ шт) (\d+,\d+ ₽) (\d+,\d+ ₽) (\d+ шт) (.+)$' >>> >>> lst = re.search(pat, text).groups() >>> lst ('Мешки для мусора Paclan ароматизированные с завязками 35 л 14 шт', '2 шт', '179,00 ₽', '358,00 ₽', '1 шт', 'Собран') >>>
Офлайн
saЗапиши структуру строки в виде формы Бэкуса-Наура
Можно взять за статичное поле рубли
<текст> ::= <название> <пробелы> <количество 1> <пробелы> <цена 1> <пробелы> <цена 2> <пробелы> <количество 2> <пробелы> <статус>
<название> ::= <любой символ> { <любой символ> }
<пробелы> ::= <пробел> { <пробел> }
<количество 1> ::= <целое число> <пробел> <штуки>
<цена 1> ::= <целое число> <точка числа> <целое число> <пробел> <рубль>
<цена 2> ::= <целое число> <точка числа> <целое число> <пробел> <рубль>
<количество 2> ::= <целое число> <пробел> <штуки>
<статус> ::= <любой символ> { <любой символ> }
<любой символ> ::= <буква> | <цифра> | <знак препинания> | <пробел>
<пробелы> ::= <пробел> { <пробел> }
<целое число> ::= <цифра не ноль> { <цифра> }
<штуки> ::= "шт"
<точка числа> ::= ","
<пробел> ::= " "
<рубль> ::= "₽"
<буква> ::= <большая буква русская> | <маленькая буква русская> | <большая буква английская> | <маленькая буква английская>
<большая буква русская> ::= "А" | "Б" | ... | "Я"
<маленькая буква русская> ::= "а" | "б" | ... | "я"
<большая буква английская> ::= "A" | "B" | ... | "Z"
<маленькая буква английская> ::= "a" | "b" | ... | "z"
<цифра не ноль> ::= "1" | ... | "9"
<цифра> ::= "0" | "1" | ... | "9"
<знак препинания> ::= "." | "," | ":" | ";" | "_"
Отредактировано py.user.next (Март 30, 2024 22:27:18)
Офлайн