【问题标题】: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) 感兴趣的标记。或者甚至更好的是根本不使用正则表达式。只需遍历字符并注意括号外的逗号或引号,如stackoverflow.com/questions/12756651/…
  • 谢谢你们俩。这是一件非常小的事情,所以我只是按照@Pshemo 的建议使用了这两个测试并且它起作用了
  • 你答对了吗?
  • @payamsbr 我想是的。它没有引发任何异常,数据看起来还不错。我需要仔细检查一些数据才能确定。你认为它不应该因为一个错误而工作吗?

标签: java regex string csv split


【解决方案1】:

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

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

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

【讨论】:

  • 感谢工作。另一种解决方案是使用@Pshemo 建议的两个测试,(?=...)(?=...),但这种方法也有效。谢谢
猜你喜欢
  • 1970-01-01
  • 2012-05-23
  • 2020-04-05
  • 1970-01-01
  • 2016-01-12
  • 2012-07-12
  • 1970-01-01
  • 2018-04-14
  • 2013-10-14
相关资源
最近更新 更多