我之前问过这个问题,它被关闭了,因为它是重复的,我接受并实际上在问题 Java: splitting a comma-separated string but ignoring commas in quotes 中找到了答案。 , 所以感谢发布它的人。
但此后我遇到了另一个问题。显然我需要做的是在有零个或偶数个双引号时使用“,”作为我的分隔符,但也忽略括号中包含的任何“,”。
所以如下:
"Thanks,", "in advance,", "for("the", "help")"
将标记为:
- 谢谢,
- 提前,
- for("the", "help")
我不确定是否可以修改我正在使用的当前正则表达式以允许这样做,但我们将不胜感激。
line.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");
最佳答案
有时候匹配你想要的比你不想要的更容易:
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()));
}
输出:
"Thanks,"
"in advance,"
"for("the", "help")"
如果您还需要它忽略括号内引号部分内的右括号,那么您需要这个:
String regex = "\"(\\((\"[^\"]*\"|[^)])*\\)|[^\"])*\"";
需要第二个更复杂版本的字符串示例是:
"foo","bar","baz(":-)",":-o")"
输出:
"foo"
"bar"
"baz(":-)",":-o")"
但是,我建议您尽可能更改数据格式。如果您使用 XML 等标准格式来存储您的 token ,这会容易得多。
关于java - 用不包含在双引号中的逗号拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2312963/