gpt4 book ai didi

java - 用不包含在双引号中的逗号拆分字符串

转载 作者:搜寻专家 更新时间:2023-10-30 21:10:26 26 4
gpt4 key购买 nike

我之前问过这个问题,它被关闭了,因为它是重复的,我接受并实际上在问题 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com