按标签拆分字符串并忽略多双引号中的标签

时间:2016-07-07 19:02:30

标签: java regex

public static void main(String[] args) {
    String text = "hi   ravi    \"how   are you\"   when    are you coming";
    String regex = "\"([^\"]*)\"|(\\S+)";

    Matcher m = Pattern.compile(regex).matcher(text);
    while (m.find()) {
        if (m.group(1) != null) {
            System.out.println("Quoted [" + m.group(1) + "]");
        } else{
            System.out.println("Plain [" + m.group(0) + "]");
        }
    }
    // getSplits(text);
}

输出:

  

平原[hi]
  平原[ravi]
  引用[你好吗]
  平原[时]
  平原[是]
  平原[你]
  平原[来]

如果给定的文本只有一个引号,则上面的代码工作正常。任何人都可以帮助我如何通过以下输入得到低于输出:

text = "hi  ravi    \"\"how are\"   you\"   when    are you coming";

预期产出:

  

平原[hi]
  平原[ravi]
  引用[你怎么样]你   平原[时]
  平原[是]
  平原[你]
  平原[来]

2 个答案:

答案 0 :(得分:1)

以下正则表达式适用于您的示例输入/输出。您将不得不对预期结果进行更详细的描述,因为这可能不是您所期望的。

public static void main(String[] args) {
    String text = "hi  ravi    \"\"how are\"   you\"   when    are you coming";
    String regex = "(\".+\")|(\\S+)";

    Matcher m = Pattern.compile(regex).matcher(text);

    while (m.find()) {
        if (m.group(1) != null) {
            System.out.println("Quoted [" + m.group(1) + "]");
        } else{
            System.out.println("Plain [" + m.group(0) + "]");
        }
    }
    // getSplits(text);
}

答案 1 :(得分:0)

这样做:

[\t]+(?=([^"]*"[^"]*")*[^"]*$)

请参阅DEMO