gpt4 book ai didi

java - 在引号外的逗号上拆分

转载 作者:IT老高 更新时间:2023-10-28 20:35:50 25 4
gpt4 key购买 nike

我的程序从文件中读取一行。此行包含逗号分隔的文本,例如:

123,test,444,"don't split, this",more test,1

我希望拆分的结果是这样的:

123
test
444
"don't split, this"
more test
1

如果我使用 String.split(","),我会得到这个:

123
test
444
"don't split
this"
more test
1

换句话说:子字符串“不要拆分,这个”中的逗号不是分隔符。如何处理?

最佳答案

你可以试试这个正则表达式:

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

这将分割 , 上的字符串,后跟偶数个双引号。换句话说,它在双引号之外的逗号上拆分。如果您的字符串中有平衡的引号,这将起作用。

解释:

,           // 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)
)

你甚至可以在你的代码中这样输入,使用 (?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
);

关于java - 在引号外的逗号上拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18893390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com