正则表达式由分隔符拆分,不包括转义的分隔符并保留空字符串

时间:2014-05-27 08:48:01

标签: java regex

我需要使用" |"分割字符串。作为一个分隔符,可以使用前面的"?"进行转义,在这种情况下,它不应被视为分隔符。 我还想在结果中保留空字符串,其中有多个分隔符彼此跟随,其间没有任何内容 - 我实际上对此部分有问题。

几个例子:

aaa|bbb|ccc
Result:
aaa
bbb
ccc

aaa?|bbb|ccc
Result:
aaa?|bbb
ccc

aaa?|bbb||ccc|||ddd
Result:
aaa?bbb
<empty string>
ccc
<empty string>
<empty string>
ddd

我正在使用下面的正则表达式,它在转义分隔符时正确地分割字符串,但是在&#34; ||&#34;的情况下它丢弃所有空字符串。我正在使用Pattern / Matcher和Java。

([^?\\|]|\\?.)+

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:1)

您可以尝试将此PatternString.split方法一起使用:

String[] input = {"aaa|bbb|ccc", "aaa?|bbb|ccc", "aaa?|bbb||ccc|||ddd"};
for (String s: input) {
    //                                          | negative lookbehind for "?" (escaped)
    //                                          |       | "|" (escaped)
    //                                          |       | 
    System.out.println(Arrays.toString(s.split("(?<!\\?)\\|")));
}

<强>输出

[aaa, bbb, ccc]
[aaa?|bbb, ccc]
[aaa?|bbb, , ccc, , , ddd]