用逗号分割字符串,但忽略括号或引号中的逗号

Posted

技术标签:

【中文标题】用逗号分割字符串,但忽略括号或引号中的逗号【英文标题】:Split string by comma but ignore commas in brackets or in quotes 【发布时间】:2017-04-07 20:20:57 【问题描述】:

我有一个像hello, "darkness, my", (old, friend) 这样的字符串,我想要这个拆分结果:hello"darkness, my"(old, friend)

我找到了一种忽略 "-marks (,?=([^\"]*\"[^\"]*\")*[^\"]*$) 中的逗号的方法和另一种忽略括号中的逗号 (,(?=[^\\)]*(?:\\(|$))) 的方法。 当我使用第一个时,我得到:hello"darkness, my"(oldfriend) 当我使用第二个时,我得到:hello"darknessmy"(old, friend)

但是我该如何结合这两种解决方案呢?

【问题讨论】:

The best regex trick ever 的变体 - 向下滚动到 Java 部分。 您始终可以同时使用这两种测试...,(?=...)(?=...)。或者为了让您的生活更简单,不要使用描述分隔符的拆分,使用Matcher#find 并描述您对any words"text between quotes"(text between parenthesis) 感兴趣的标记。或者甚至更好的是根本不使用正则表达式。只需遍历字符并注意括号外的逗号或引号,如***.com/questions/12756651/… 谢谢你们俩。这是一件非常小的事情,所以我只是按照@Pshemo 的建议使用了这两个测试并且它起作用了 你答对了吗? @payamsbr 我想是的。它没有引发任何异常,数据看起来还不错。我需要仔细检查一些数据才能确定。你认为它不应该因为一个错误而工作吗? 【参考方案1】:

可能更容易匹配零件,而不是拆分它们。

\s*("[^"]*"|\([^)]*\)|[^,]+)

这会将每条数据捕获为第 1 组。

【讨论】:

感谢工作。另一种解决方案是使用@Pshemo 建议的两个测试,(?=...)(?=...),但这种方法也有效。谢谢

以上是关于用逗号分割字符串,但忽略括号或引号中的逗号的主要内容,如果未能解决你的问题,请参考以下文章

PHP:用逗号分割字符串,但不是在大括号或引号之间?

oracle 用逗号分割一个带引号的字符串

使用逗号分割文本,但忽略字符串中的任何字符

用逗号分割数字,忽略双引号里面的逗号

分割逗号时,如何忽略括号中的逗号?

Java:拆分逗号分隔的字符串但忽略引号中的逗号