Java使用正则表达式前瞻分割 - 字符后跟字符

时间:2016-07-05 11:28:01

标签: java regex string

我需要将字符串拆分为子句,以便将它们分类为引用而非引用的字符串。单引号字符用作分隔符,两个单引号表示转义序列,表示它们不应用于拆分。

例如:

"111 '222''22' 3333"

应分为

"111", "222''22", "3333"

无论是否有空格。

所以,我编写了以下代码,但它不起作用。尝试使用"\\'(?<!\\')"进行后视,但没有成功。请帮忙

    String rgxSplit="\\'(?!\\')";
    String text="";
    Scanner s=new Scanner(System.in);

    System.out.println("\""+rgxSplit+"\"");
    text=s.nextLine();
    while(!text.equals(""))
    {
        String [] splitted=text.split(rgxSplit);
        for(int i=0;i<splitted.length;i++)
        {
            if(i%2==0)
            {
                System.out.println("+" + splitted[i]);
            }
            else
            {
                System.out.println("-" + splitted[i]);
            }
        }
        text=s.nextLine();
    }

输出:

$ java ParseTest
"\'(?!\')"
111 '222''22' 3333
+111
-222'
+22
- 3333

2 个答案:

答案 0 :(得分:2)

这应该拆分为单引号(当它没有加倍时),并且在连续三次的情况下,它将对前两个进行分组,并将在第三个分开。

String [] splitted=text.split("(?<!') *' *(?!')|(?<='') *' *");

答案 1 :(得分:0)

要分割单撇号,请使用撇号的两侧:

String[] parts = str.split(" *(?<!')'(?!') *");

请参阅live demo on ideone