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

时间:2016-11-23 17:38:55

标签: java regex string csv split

我有一个像 TreeMap<Integer, String> map = new TreeMap<Integer, String>(); map.put(1, "abc1"); map.put(2, "abc2"); map.put(3, "abc3"); NavigableMap<Integer, String> nmap = map.descendingMap(); for (NavigableMap.Entry<Integer, String> entry : nmap.entrySet()) { System.out.println("Key : " + entry.getKey() + " Value : " + entry.getValue()); } 这样的字符串,我想要这个分裂的结果:
hello, "darkness, my", (old, friend)
hello
"darkness, my"

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

但我如何将这两种解决方案结合起来呢?

1 个答案:

答案 0 :(得分:3)

可能更容易匹配部件,而不是将它们分开。

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

这将以组1的形式捕获每个数据。