用逗号分割字符串,但忽略括号或引号中的逗号
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"
(old
friend)
当我使用第二个时,我得到:hello
"darkness
my"
(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 建议的两个测试,(?=...)(?=...)
,但这种方法也有效。谢谢以上是关于用逗号分割字符串,但忽略括号或引号中的逗号的主要内容,如果未能解决你的问题,请参考以下文章