在逗号上拆分一个不带双引号的逗号的字符串

bin*_*lon 12 java regex split

我之前提出过这个问题并且因为它是一个副本而被关闭了,我接受并实际在Java问题中找到答案:拆分逗号分隔的字符串但忽略引号中的逗号,所以感谢发布它的人.

但是我已经遇到了另一个问题.显然我需要做的是当零或偶数个双引号时使用","作为我的分隔符,但也忽略括号中的任何",".

所以以下内容:

"Thanks,", "in advance,", "for("the", "help")"
Run Code Online (Sandbox Code Playgroud)

将标记为:

  • 谢谢,
  • 提前,
  • for("the","help")

我不确定是否有任何修改我正在使用的当前正则表达式允许这样做,但任何指导将不胜感激.

line.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 5

有时候更容易匹配你想要的而不是你不想要的东西:

String s = "\"Thanks,\", \"in advance,\", \"for(\"the\", \"help\")\"";
String regex = "\"(\\([^)]*\\)|[^\"])*\"";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(s);
while(m.find()) {
    System.out.println(s.substring(m.start(),m.end()));
}
Run Code Online (Sandbox Code Playgroud)

输出:

"Thanks,"
"in advance,"
"for("the", "help")"
Run Code Online (Sandbox Code Playgroud)

如果你还需要它忽略括号内的引号部分内的右括号,那么你需要这样:

 String regex = "\"(\\((\"[^\"]*\"|[^)])*\\)|[^\"])*\"";
Run Code Online (Sandbox Code Playgroud)

需要第二个更复杂版本的字符串示例如下:

 "foo","bar","baz(":-)",":-o")"
Run Code Online (Sandbox Code Playgroud)

输出:

"foo"
"bar"
"baz(":-)",":-o")"
Run Code Online (Sandbox Code Playgroud)

但是,如果可能的话,我建议您更改数据格式.如果您使用XML等标准格式来存储令牌,这将会容易得多.