我想在不在双引号内的新行上拆分数据流。该流包含多行数据,其中每一行由换行符分隔。但是,数据行可能包含双引号内的换行符。这些换行符并不表示下一行数据已经开始,所以我想忽略它们。
因此,数据可能如下所示:
第一行: bla bla,12345,...
第2行:"bla
bla",12345,...
第三行: bla bla,12345,...
我尝试在类似的文章中使用正则表达式,通过将逗号替换为换行符来拆分未用双引号找到的逗号(Splitting on comma outside quotes):
\n(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)这个正则表达式与我预期的不匹配。我是不是遗漏了什么?
发布于 2020-07-15 01:36:26
匹配不在双引号之间的行终止符等效于匹配从字符串开头开始的偶数个双引号前面的行终止符。您可以将这样的行终止符与以下正则表达式相匹配(未设置多行标志,以便^匹配字符串的开头,而不是行的开头)。
/(?<=^[^"]*(?:"[^"]*"[^"]*)*)\r?\n/Javascript的regex引擎(令人印象深刻地支持可变长度lookbehinds)执行以下操作。
(?<= : begin positive lookbehind
^ : match beginning of string (not line)
[^"]* : match 0+ chars other than '"'
(?: : begin non-capture group
"[^"]*" : match '"', 0+ chars other than '"', '"'
[^"]* : match 0+ chars other than '"'
)* : end non-capture group and execute 0+ times
) : end postive lookbehind
\r?\n : match line terminatorhttps://stackoverflow.com/questions/62898644
复制相似问题