puedo estar equivocado en esta parte, pero la razón sea separando los dos es porque
group() sólo igualará el último emparejado subsecuencia, que es lo que se pone igualada por cada llamada a
find().
Gracias, Mark Byers.
Sin duda, puede resolver esto colocando la parte completa que desea dentro de un "grupo de captura", lo que se hace ubicándolo entre paréntesis. Esto lo hace para que pueda agrupar las partes coincidentes de su expresión regular en una subcadena. Su patrón sería el siguiente aspecto:
Pattern.compile("C=(\\d+\\.\\d+)")
Para el análisis de 3567 o 3.567, su patrón habríaC=(\\d+(\\.\\d+)?)
con el grupo 1 que representa el número entero.Además, tenga en cuenta que, dado que desea coincidir específicamente con un punto, quiere escapar de su carácter .
(punto) para que no se interprete como el token "cualquier carácter". Para esta entrada, sin embargo, no importa
Luego, para obtener su 3.567, usted llamaría a m. group(1) para tomar el primer grupo (que cuenta desde 1) especificado. Esto significaría que su llamada Double.parseDouble esencialmente se convertiría en Double.parseDouble("3.567")
En cuanto a tomar C = fuera de su patrón, ya que no soy tan versado con RegExp, podría recomendar que split su cadena de entrada en el punto y coma y luego verifique si cada una de las divisiones contiene la C; luego puede aplicar el patrón (con los grupos de captura) para obtener el 3.567 de su Matcher.
Edición Para los más general (y probablemente más útil!) Casos en el comentario de gawi, por favor utilice el siguiente (de http://www.regular-expressions.info/floatingpoint.html)
Pattern.compile("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?")
Esto tiene soporte para signo opcional, ya sea entero opcional o facultativo partes decimales y exponentes positivos/negativos opcionales. Inserte grupos de captura donde desee para elegir piezas individualmente. El exponente como un todo está en su propio grupo para hacerlo, como un todo, opcional.
Un punto (".") No es un dígito. –