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

标签 java regex split

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

相关文章:

java - 单个文件中目标命名空间的多个 <schemaBindings>

mysql - MYSQL Join 中的 REGEXP 工作不正常

regex - 需要正则表达式来匹配单词或字符串结尾

java - 在这个例子中如何解决代码重复,我引入继承来实际解决代码重复

java - 通过从命令行安装 tomcat 7 maven 插件来下载 spring petclinic

regex - Sed 在特定模式后替换

unix - AWK 每隔 n 行拆分文件,但将 ID 分组在一起

python - 需要帮助为我的字符串模式找到正确的正则表达式模式

shell - 与 Linux split 相反

java - ClassNotFoundException org.openqa.selenium.WebDriver