有条件地在复杂的分隔符上拆分字符串

时间:2016-05-09 12:27:24

标签: java regex string split

我有以下字符串:

  

1,2,3 | 5,4,5 | 8

我希望输出如下:

  

1,2,3 | 5
  4,5 | 8

如何使用java实现这一点? 我的意思是与"|"分开,但前提是它在{{1}}之后。

4 个答案:

答案 0 :(得分:4)

添加positive lookbehind条件,例如:

"1,2,3|5,4,5|8".split("(?<=\\|\\d{1,10}),"))

Lookbehind条件(?<=\\|\\d{1,10})表示:|后跟最多10位数(因为lookbehind需要定义最大长度,无限重复修饰符+*不能使用)

答案 1 :(得分:3)

一种方法是使用lookbehind:

for (String s : "1,2,3|5,4,5|8".split("(?<=\\|\\d{1,20}),")) {
    System.out.println(s);
}

以上打印

1,2,3|5
4,5|8

请注意,Java正则表达式有一个限制,即外观必须具有明显的上限。因此,您需要使用\\d{1,20}代替更自然的\\d+

Demo.

答案 2 :(得分:1)

你可以这样做:

split("(?<=\\|[0-9]),")

下面:

  • (?<=\\|[0-9])
    • ?<=表示积极的外观。
    • \\|[0-9]表示有一个|和,之前的数字。
  • ,,
  • 相匹配

答案 3 :(得分:0)

如果你只需要输出,

final String[] p = x.split(",");

for (int i=0; i<p.length; i++) {
    if (i>0 && p[i-1].contains("|"))
        System.out.print("\n");
    else
        System.out.print(",");
    System.out.print(p[i]);
}
//if (p.length>0)   
    System.out.print("\n");