sa
Можно взять за статичное поле рубли
Запиши структуру строки в виде формы Бэкуса-Наура
wiki. ru. БНФwiki. en. БНФwiki. ru. БНФ расширеннаяВот так оно смотрится:
<текст> ::= <название> <пробелы> <количество 1> <пробелы> <цена 1> <пробелы> <цена 2> <пробелы> <количество 2> <пробелы> <статус>
<название> ::= <любой символ> { <любой символ> }
<пробелы> ::= <пробел> { <пробел> }
<количество 1> ::= <целое число> <пробел> <штуки>
<цена 1> ::= <целое число> <точка числа> <целое число> <пробел> <рубль>
<цена 2> ::= <целое число> <точка числа> <целое число> <пробел> <рубль>
<количество 2> ::= <целое число> <пробел> <штуки>
<статус> ::= <любой символ> { <любой символ> }
<любой символ> ::= <буква> | <цифра> | <знак препинания> | <пробел>
<пробелы> ::= <пробел> { <пробел> }
<целое число> ::= <цифра не ноль> { <цифра> }
<штуки> ::= "шт"
<точка числа> ::= ","
<пробел> ::= " "
<рубль> ::= "₽"
<буква> ::= <большая буква русская> | <маленькая буква русская> | <большая буква английская> | <маленькая буква английская>
<большая буква русская> ::= "А" | "Б" | ... | "Я"
<маленькая буква русская> ::= "а" | "б" | ... | "я"
<большая буква английская> ::= "A" | "B" | ... | "Z"
<маленькая буква английская> ::= "a" | "b" | ... | "z"
<цифра не ноль> ::= "1" | ... | "9"
<цифра> ::= "0" | "1" | ... | "9"
<знак препинания> ::= "." | "," | ":" | ";" | "_"
Дальше ты можешь разбирать лексемы. Можно сразу объёмные лексемы разбирать, находящиеся наверху дерева вывода (которое строится по этой грамматике), а можно спускаться до более детальных лексем и разбирать их.
Можно использовать регулярные выражения, можно не использовать регулярные выражения. Чаще всего, конечно, в подобных задачах используются комбинированные способы. То есть ты не обязан использовать только регулярные выражения, если применяешь их для разбора какой-то части текста. Можно одну часть текста разобрать регулярным выражением, другую часть текста разобрать строковым методом, третью часть текста разобрать символьной операцией.
tags: bnf