首页 > Java > java教程 > 如何在保留引号的同时拆分逗号分隔的文本?

如何在保留引号的同时拆分逗号分隔的文本?

Susan Sarandon
发布: 2024-12-02 02:21:10
原创
474 人浏览过

How Can I Split Comma-Separated Text While Preserving Quotes?

使用逗号分割文本同时保留引号

解析逗号分隔的文本时,处理逗号出现在带引号的子字符串中的情况非常重要,比如这个例子:

123,test,444,"don't split, this",more test,1
登录后复制

分割这个使用默认的 String.split(",") 方法以逗号分隔字符串会产生:

123
test
444
"don't split
 this"
more test
1
登录后复制

如您所见,“don't split, this”引号中的逗号被错误地解释为分隔符.

要解决这个问题,需要更复杂的方法。在这种情况下,我们可以使用正则表达式以逗号分隔字符串,而逗号后面不跟偶数个双引号。这可确保带引号的子字符串内的逗号不会被误认为分隔符。

str.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");
登录后复制

此正则表达式使用以下逻辑:

  • (?=):向前看断言确保:

    • (?:[^"]*"[^"]*")*:匹配用双引号括起来的任意数量的子字符串。
    • [^"]* :匹配任意数量的非引号字符。
    • $:字符串结尾

换句话说,此前瞻检查当前逗号后面是否有偶数个双引号以及字符串结尾(如果是的话)。 ,表示逗号不在带引号的子字符串内,可以被视为分隔符,否则,逗号将被忽略。

您也可以使用简化版本。正则表达式的:

str.split("(?x)  ,  (?=  (?:  [^\"]*  \"  [^\"]*  \"  )*  [^\"]*  $  )");
登录后复制

在此版本中,修饰符 (?x) 用于通过忽略空白字符来增强正则表达式的可读性。

以上是如何在保留引号的同时拆分逗号分隔的文本?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板