我需要在Java中使用正则表达式拆分字符串。
我需要获得一个数组:A
,B
,01/01/2016 12:31
,D
为什么我的正则表达式不起作用?它将输出原始字符串。
String source = "A|B|[01/01/2016 12:31]|D";
String regex = "\\|\\|\\[.*\\]\\|";
String[] array = source.split(regex);
for(String data: array){
System.out.println(data);
}
答案 0 :(得分:2)
正则表达式与输入字符串不匹配,因为它需要两个连续的管道(在模式的开头)。更准确地说,\|\|\[.*\]\|
匹配2个管道,后跟[
,后跟除换行符之外的零个或多个字符(尽可能多),然后是]
和{{1} }。
您需要使用以下正则表达式:
|
请参阅IDEONE demo
此正则表达式将匹配一个或多个字符:String regex = "[|\\[\\]]+";
,|
或]
。
答案 1 :(得分:0)
将第二行修改为输入字符串格式的以下内容,并使用-1调用split应该处理令牌为空(包括最后一个)时的所有情况
String regex = "((\\|\\[)|(\\]\\|)|(\\|))";
String[] array = source.split(regex, -1);
上面给出了'A | B | [01/01/2016 12:31] | D'的以下输出,如果是空D,它会打印一个零字符串。
A
B
01/01/2016 12:31
D
这虽然适用于格式为A | B | [C] | D的输入字符串,但线程[[| \ [\]]] +中提到的其他正则表达式将处理显示输入中任意位置的方括号与|只要没有零字符串,例如A || [C] | D将导致令牌移位。