Я пытаюсь соответствовать строке , как это: 62.00|LQ+2*2,FP,MD*3 "Description"
Если значение десятичных 2 цифры по желанию, каждый пользователю характеризуется два Chars и может сопровождаться
(\ + [\ D] +)? или (\ * [\ d] +)? нет, или ни один, или оба, или как в другом порядке
нравиться:
LQ * 2 + 4 | LQ + 4 * 2 | LQ * 2 | LQ + 8 | LQ
Описание также является необязательным
То, что я попытался это:
Pattern.compile("^(?<number>[\\d]+(\\.[\\d]{2})?)\\|(?<users>([A-Z]{2}){1}(((\\+[\\d]+)?(\\*[\\d]+)?)|((\\+[\\d]+)?(\\*[\\d]+)?))((,[A-Z]{2})(((\\+[\\d]+)?(\\*[\\d]+)?)|((\\+[\\d]+)?(\\*[\\d]+)?)))*)(\\s\\\"(?<message>.+)\\\")?$");
Мне нужно, чтобы получить все пользователи, так что я могу разделить их «», и затем далее REGEX мой путь в it.but я не могу захватить что-нибудь из it.The желаемого выхода из
62,00 | LQ + 2 * 2, FP, MD * 3 "Описание"
Должно быть:
62,00
LQ + 2 * 2, FP, MD * 3
Описание
Принятые входы должны быть такого рода:
62,00 | LQ + 2 * 2, FP, MD * 3
30 | LQ "гамбургеры"
35,15 | LQ * 2, FP + 2 * 4, MD * 3 + 4 "Картофель"
35,15 | LQ, FP, MD
Точное регулярное выражение для соответствия входов Вы описали, должны быть выполнены с помощью этого регулярного выражения,
^(\d+(?:\.\d{1,2})?)\|([a-zA-Z]{2}(?:(?:\+\d+(?:\*\d+)?)|(?:\*\d+(?:\+\d+)?))?(?:,[a-zA-Z]{2}(?:(?:\+\d+(?:\*\d+)?)|(?:\*\d+(?:\+\d+)?))?)*)(?: +(.+))?$
Где group1 будет содержать число, которое может иметь дополнительные десятичные не более двух цифр и group2 будет иметь запятую входов, как вы описали в вашем посте и группе 3 будет содержать дополнительное описание, если присутствуют.
Объяснение регулярного выражения:
^
- начало строки(\d+(?:\.\d{1,2})?)
- сопоставляет число, которое может иметь дополнительные 2 цифры после десятичной и захватов его в group1\|
- Спички буквальные ,|
присутствующие в вашем входе после номера([a-zA-Z]{2}(?:(?:\+\d+(?:\*\d+)?)|(?:\*\d+(?:\+\d+)?))?(?:,[a-zA-Z]{2}(?:(?:\+\d+(?:\*\d+)?)|(?:\*\d+(?:\+\d+)?))?)*)
- Эта часть соответствует двум букв , а затем любой комбинации с+
последующим номером и , необязательно имеющий с*
последующим номером ИЛИ с*
последующим номером и , необязательно имеющий с+
последующим номером ровно один раз или весь он является необязательным и захватывает его в group2(?: +(.+))?
- Это соответствует необязательное описание и захватывает его в группе 3$
- Отмечает конец ввода