Estoy tratando de coincidir con una cadena como esta: 62.00|LQ+2*2,FP,MD*3 "Description"
Cuando el valor decimal es 2 dígitos opcional, cada usuario se caracteriza por dos Caracteres y puede ser seguido por
(\ + [\ D] +)? o (\ * [\ d] +)? o ninguno, o ambos, o ambas cosas en un orden diferente
me gusta:
LQ * 2 + 4 | LQ + 4 * 2 | LQ * 2 | LQ + 8 | LQ
Descripción también es opcional
Lo que he intentado es la siguiente:
Pattern.compile("^(?<number>[\\d]+(\\.[\\d]{2})?)\\|(?<users>([A-Z]{2}){1}(((\\+[\\d]+)?(\\*[\\d]+)?)|((\\+[\\d]+)?(\\*[\\d]+)?))((,[A-Z]{2})(((\\+[\\d]+)?(\\*[\\d]+)?)|((\\+[\\d]+)?(\\*[\\d]+)?)))*)(\\s\\\"(?<message>.+)\\\")?$");
Tengo que conseguir por todos los usuarios para que pueda dividirlas por '', y luego de expresiones regulares aún más mi camino en it.But puedo deseado no agarrar cualquier cosa fuera de la salida de it.The
62.00 | LQ + 2 * 2, FP, MD * 3 "Descripción"
Debiera ser:
62.00
LQ + 2 * 2, FP, MD * 3
Descripción
entradas aceptadas deben ser de este tipo:
62.00 | LQ + 2 * 2, FP, MD * 3
30 | LQ "Hamburguesas"
35.15 | LQ * 2, FP + 2 * 4, MD * 3 + 4 "patatas"
35.15 | LQ, FP, MD
La expresión regular precisa para que coincida con las entradas que has descrito debe ser cumplida por esta expresión regular,
^(\d+(?:\.\d{1,2})?)\|([a-zA-Z]{2}(?:(?:\+\d+(?:\*\d+)?)|(?:\*\d+(?:\+\d+)?))?(?:,[a-zA-Z]{2}(?:(?:\+\d+(?:\*\d+)?)|(?:\*\d+(?:\+\d+)?))?)*)(?: +(.+))?$
Donde el grupo 1 contendrá el número que puede tener decimales opcionales upto dos dígitos y grupo2 tendrán la coma entradas separado como usted la describe en su puesto y group3 contendrá la descripción opcional si está presente.
Explicación de expresiones regulares:
^
- Comienzo de la cadena(\d+(?:\.\d{1,2})?)
- Hace coincidir el número que puede tener opcional 2 dígitos después decimal y lo captura en grupo1\|
- Hace coincidir literal|
presente en su entrada después del número([a-zA-Z]{2}(?:(?:\+\d+(?:\*\d+)?)|(?:\*\d+(?:\+\d+)?))?(?:,[a-zA-Z]{2}(?:(?:\+\d+(?:\*\d+)?)|(?:\*\d+(?:\+\d+)?))?)*)
- Esta parte coincide con dos letras seguidas de cualquier combinación de+
seguido de un número y, opcionalmente, después de haber*
seguido por número o*
seguido de un número y, opcionalmente, después de haber+
seguido por número exactamente una vez o toda de él que es opcional y lo captura en grupo2(?: +(.+))?
- Esto coincide con la descripción opcional y lo captura en group3$
- Marcas final de la entrada