Hola me encontré a lo largo de esta cuestión en el que el autor ha querido convertir la cadena:
exampleString = "2 Marine Cargo 14,642 10,528 Denver Factory North 16,016 more text 8,609 argA 2,106 argB"
en una matriz / lista que es similar a esto:
String[] resultArray = {"2", "Marine Cargo", "14,642", "10,528", "Denver Factory North", "16,016",
"more text", "8,609", "argA", "2,106", "argB"};
Partes de modo numérico (con o sin una coma) se consideran un elemento
y las secuencias de alfa puros (dividido por ninguno, uno o múltiples espacios) se consideran un elemento.
Esto se puede hacer haciendo coincidir los grupos
o por división en los espacios donde tanto la anterior y la siguiente parte de la cadena hay una secuencia alfa. Estoy ansioso por ver si este último es posible. Creo que en parte se debe hacer con un aspecto negativo por delante:
\s+(?![A-Za-z]+)
y una parte con una mirada detrás negativo.
(?<![a-zA-Z])\s+
Busco para combinar ambas afirmaciones de tal manera que sólo no coincide si ambas las partes antes y después de la secuencia de espacios son alfa, por lo que puede múltiples cadena de palabras juntas sin división en el medio. He encontrado otra pregunta sobre este tema, pero no soy capaz de aplicar ingeniería inversa para este caso particular. es posible?
Puedes utilizar
String[] results = exampleString.split("(?<=\\d)\\s+(?=[a-zA-Z])|(?<=[a-zA-Z])\\s+(?=\\d)|(?<=\\d)\\s+(?=\\d)");
Vea la demostración de expresiones regulares
detalles
(?<=\d)\s+(?=[a-zA-Z])
- 1+ espacios en blanco que tienen un dígito a la izquierda y una carta a la derecha|
- o(?<=[a-zA-Z])\s+(?=\d)
- 1+ espacios en blanco que tienen una carta a la izquierda y un dígito a la derecha|
- o(?<=\d)\s+(?=\d)
- 1+ espacios en blanco que tienen un dígito a la izquierda y un dígito a la derecha.
String exampleString = "2 Marine Cargo 14,642 10,528 Denver Factory North 16,016 more text 8,609 argA 2,106 argB";
String results[] = exampleString.split("(?<=\\d)\\s+(?=[a-zA-Z])|(?<=[a-zA-Z])\\s+(?=\\d)|(?<=\\d)\\s+(?=\\d)");
for (String s: results) {
System.out.println(s);
}
Salida:
2
Marine Cargo
14,642
10,528
Denver Factory North
16,016
more text
8,609
argA
2,106
argB