用引号分割逗号分隔的文本
在文本数据包含逗号分隔值的某些场景下,有必要分割数据基于逗号。然而,当数据包含引号内嵌入逗号的字符串时,就会出现挑战。
为了解决这个问题,一种通用的解决方案是使用专门针对双引号之外的逗号的正则表达式:
str.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中文网其他相关文章!