Tengo una cadena que coincide con esta expresión regular: ^.+:[0-9]+(\.[0-9]+)*/[0-9]+$
que se puede visualizar fácilmente como (Text):(Double)/(Int)
. Necesito dividir esta cadena en las tres partes. Normalmente esto sería fácil, excepto que el (Text)
puede contener dos puntos, por lo que no puedo dividir dos puntos, sino el último dos puntos.Opcionalmente utilizando String.split(), divida una cadena en la última aparición de un delimitador
El .*
es codicioso por lo que ya hace un trabajo bastante ordenado de hacer esto, pero esto no funcionará como una expresión regular en String.split() porque va a comer mi (Text)
como parte del delimitador. Idealmente, me gustaría tener algo que devuelva un String [] con tres cadenas. Estoy 100% bien al no usar String.split() para esto.
OK, ahora diga que en lugar de usar '[\ d \.] +' para que coincida con el doble, ¿y si quisiera ser estricto y exigir '\ d + (\. \ d +) *'. ¿Podría usar con seguridad solo los grupos 0,1,3? Es decir, 'sometext: other: 2/4' y 'sometext: other: grupo de alféizar 2.0/4' de la misma manera? – Huckle
Serían los grupos 1, 2 y 4, pero no es necesario que se moleste con eso. Simplemente haga que el nuevo grupo sea uno que no lo capture : '\ d + (?: \. \ d +)?' –
group (0) devuelve la cadena coincidente completa. Este es uno de los pocos casos en que re el índice no comienza en cero. @AlanMoore tiene una buena sugerencia para una estricta doble expresión regular. –