首页 >Java >java教程 >如何使用正则表达式拆分带引号的逗号分隔文本?

如何使用正则表达式拆分带引号的逗号分隔文本?

Barbara Streisand
Barbara Streisand原创
2024-12-02 01:15:10458浏览

How to Split Comma-Separated Text with Quotes Using Regular Expressions?

用引号分割逗号分隔的文本

在文本数据包含逗号分隔值的某些场景下,有必要分割数据基于逗号。然而,当数据包含引号内嵌入逗号的字符串时,就会出现挑战。

为了解决这个问题,一种通用的解决方案是使用专门针对双引号之外的逗号的正则表达式:

str.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");

剖析这个正则表达式:

  • :, 表示数据之间的目标逗号value.
  • (?=...$) 是一个前瞻断言,表示逗号后面必须跟剩余的表达式。
  • (?:[^"]*"[^"]*")* 匹配零个或多个重复的双引号对,确保任何嵌入的逗号都被排除在外split。
  • [^"]* 对应于最后一个双引号或字符串开头之后的任何非引号字符。

或者,可以使用 (?x) 修饰符以更易读的格式编写相同的正则表达式,这允许多行表达式增强可读性:

String[] arr = str.split("(?x)   " + 
                     ",          " +   // Split on comma
                     "(?=        " +   // Followed by
                     "  (?:      " +   // Start a non-capture group
                     "    [^\"]* " +   // 0 or more non-quote characters
                     "    \"     " +   // 1 quote
                     "    [^\"]* " +   // 0 or more non-quote characters
                     "    \"     " +   // 1 quote
                     "  )*       " +   // 0 or more repetition of non-capture group (multiple of 2 quotes will be even)
                     "  [^\"]*   " +   // Finally 0 or more non-quotes
                     "  $        " +   // Till the end  (This is necessary, else every comma will satisfy the condition)
                     ")          "     // End look-ahead
                         );

该解决方案有效解决了逗号分隔文本的分割问题,同时保留了双引号内包含逗号的字符串的完整性。

以上是如何使用正则表达式拆分带引号的逗号分隔文本?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn