Сплит на не покинутых пространствах - PullRequest
2 голосов
/ 20 июня 2011

У меня есть строки в виде:

/path/ /path\ with\ space/ /another/

Мне нужно разделить это, чтобы я получил массив, содержащий:

[ /path/, /path with space/, /another/ ]

Есть ли простое регулярное выражениечто позаботится об этом?Ранее я использовал \ s +, но, очевидно, здесь это не работает.

Ответы [ 3 ]

7 голосов
/ 20 июня 2011

Используйте негативный вид сзади .

String s = "/path/ /path\\ with\\ space/ /another/";
String[] parts = s.split("(?<!\\\\)\\s+");

System.out.println(Arrays.toString(parts));
// prints [/path/, /path\ with\ space/, /another/]

Обратите внимание, что второй элемент по-прежнему содержит \ с, которые вам нужно удалить самостоятельно.

for (int i=0; i<parts.length; i++)
{
    parts[i] = parts[i].replaceAll("\\\\ ", " ");
}

System.out.println(Arrays.toString(parts));
// prints [/path/, /path with space/, /another/]

Да, это четыре \ s только для совпадения с одним в строке.

1 голос
/ 20 июня 2011

Что если вы разделите его на «и» (отметьте пробел) и добавите косую черту после каждого совпадения? Я не уверен, будет ли split работать со взглядом назад.

0 голосов
/ 20 июня 2011

Вы пробовали с [/](w|s)+[/]?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...