正则表达式基于Java中的逗号分割字符串

时间:2018-08-07 18:16:00

标签: regex

我有一个要分割的csv文件中的字符串。该字符串可以在双引号或JSON中包含逗号。 例如,如果字符串是:

abc, pq"r,s", {"one":1, "two":2}

正则表达式应将其分为三个标记,如下所示:

  1. abc
  2. pq“ r,s”
  3. {“一个”:1,“两个”:2}

我尝试过this regex

正则表达式如下:(?x)[,](?=([^"]*"[^"]*")*[^"]*$)

任何人都可以建议正确的正则表达式吗?

1 个答案:

答案 0 :(得分:0)

以下是适用于您的示例abc, pq"r,s", {"one":1, "two":2}的正则表达式:

,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)(?=(?:[^{}]*{[^{}]*})*[^}]*$)

或查看此regex101 example

此正则表达式包含三个部分

  1. ,是我们要匹配的逗号
  2. (?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)是基于Bart Kiers的主题讨论Java: splitting a comma-separated string but ignoring commas in quotes的展望。
  3. (?=(?:[^{}]*{[^{}]*})*[^}]*$)是适应{ ... }的适应性展望。

不确定是否可以在其他示例中使用。