Charles Morin:
Estoy tratando de dividir esta cadena:
aba (2) bb (52) GC (4) d (2) Fe (14) f (6) g (8) h (4) 5 (6)
lo que parece que esta matriz:
[A, b, a (2), b, b (52), g, c (4), d (2), f, e (14), f (6), g (8)]
Estas son las reglas, se puede aceptar letras A a G , que puede ser una letra sola, pero si hay paréntesis a continuación de ella, tiene que incluirlos y su contenido. El contenido de los paréntesis debe ser un valor numérico .
Esto es lo que he intentado:
content = "aba(2)bb(52)gc(4)d(2)fe(14)f(6)g(8)h(4)5(6)";
a = content.split("[a-g]|[a-g]\\([0-9]*\\)");
for (String s:
a) {
System.out.println(s);
}
Y aquí está la salida
(2)
(52)
(4) (2)
(14) (6) (8) h (4) 5 (6)
Gracias.
Wiktor Stribiżav:
Es más fácil para que coincida con estas subseries:
String content = "aba(2)bb(52)gc(4)d(2)fe(14)f(6)g(8)h(4)5(6)";
Pattern pattern = Pattern.compile("[a-g](?:\\(\\d+\\))?");
List<String> res = new ArrayList<>();
Matcher matcher = pattern.matcher(content);
while (matcher.find()){
res.add(matcher.group(0));
}
System.out.println(res);
Salida:
[a, b, a(2), b, b(52), g, c(4), d(2), f, e(14), f(6), g(8)]
Vea la demostración de Java y una demostración de expresiones regulares .
detalles del patrón
[a-g]
- una carta dea
ag
(?:\(\d+\))?
- un grupo coincidente opcional no captura de 1 o 0 ocurrencias de\(
- un(
carbón de leña\d+
- 1+ dígitos\)
- un)
carbón de leña.