2016-11-23 137 views
3

我有一个像hello, "darkness, my", (old, friend)一个字符串,我想这个分裂的结果:
hello
"darkness, my"
(old, friend)分割字符串用逗号而忽略括号或引号逗号

我发现了一个办法忽略逗号。在“-marks(,?=([^\"]*\"[^\"]*\")*[^\"]*$),另一个办法忽略括号中的逗号(,(?=[^\\)]*(?:\\(|$))
当我使用的第一个,我得到:
hello
"darkness, my"
(old
friend)
当我使用第二个,我得到:
hello
"darkness
my"
(old, friend)

但我怎么结合这两种解决方案?

+3

变异[**最佳的正则表达式特技以往**](http://www.rexegg.com/regex-best -trick.html) - 向下滚动到“Java”部分。 – Jan

+1

您可以随时使用两种测试...,(?= ...)(?= ...)'。或者为了简化你的生活,不要使用描述分隔符的split,使用'Matcher#find'并描述你对'任何单词'或'引号之间的文本'''OR'(括号之间的文本)'感兴趣的标记。或者甚至更好的是不要使用正则表达式。只需遍历字符,并注意括号或引号之外的逗号,如https://stackoverflow.com/questions/12756651/split-a-string-based-on-regex/12756948#12756948 – Pshemo

+0

谢谢你们两位。这是一个非常小的事情,所以我只是使用@Pshemo建议的两个测试,它的工作 – Selphiron

回答

3

可能比较容易匹配部件,而不是拆分它们。

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

这将捕获每片数据为组1

+0

谢谢你的工作。另一种解决方案是使用两个测试',(?= ...)(?= ...)'作为@Pshemo建议,但这种方法也适用。谢谢 – Selphiron

相关问题