Separar una cadena sólo si tanto la búsqueda negativa hacia delante y negativo de búsqueda hacia atrás se statisfied

Stephan Hogenboom:

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?

Wiktor Stribiżav:

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.

demostración de Java :

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

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=232395&siteId=1
Recomendado
Clasificación