在非转义空间分开

时间:2011-06-20 15:27:24

标签: java regex string

我有以下形式的字符串:

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

我需要拆分它,所以我最终得到一个包含:

的数组
[ /path/, /path with space/, /another/ ]

是否有一个简单的正则表达式可以解决这个问题?以前我使用的是\ s +,但显然这在这里不起作用。

3 个答案:

答案 0 :(得分:7)

使用negative lookbehind

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/]

是的, \只是匹配字符串中的一个。

答案 1 :(得分:1)

如果你将它拆分为和/“(注意空格)并在每次匹配后附加正斜杠怎么办?我不确定拆分是否适用于后视。

答案 2 :(得分:0)

您是否尝试使用[/](w|s)+[/]