RegEx для согласования специальных шаблонов

Зажигание:

Я пытаюсь соответствовать строке , как это: 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

Pushpesh Кумар Rajwanshi:

Точное регулярное выражение для соответствия входов Вы описали, должны быть выполнены с помощью этого регулярного выражения,

^(\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
  • $ - Отмечает конец ввода

Regex Demo

рекомендация

отhttp://43.154.161.224:23101/article/api/json?id=204147&siteId=1