簡體   English   中英

逗號分隔的字符串排除雙引號中的逗號並分隔相鄰的逗號

[英]String split on comma exclude comma in double quote and split adjacent commas

我想根據逗號分割字符串,但不包括雙引號,如果有相鄰逗號,也應將其計為單獨的標記

我可以使用正則表達式[^,\\"']+|\\"([^\\"]*)\\"對逗號進行字符串分割(不包括雙引號[^,\\"']+|\\"([^\\"]*)\\"

但是如果有相鄰的逗號,則無法正確標記化標記。 字符串示例

one,two,three,four,"five1,five2", six ,seven,"eight1,eight2","nine",,eleven

輸出應該是

one
two
three
four
five1,five2
six
seven
eight1,eight2
nine

eleven

請幫忙

如果所有引號都匹配,則每個要分割的逗號后面都將加上偶數個" 。因此,您可以使用前瞻並將其填充到myString.split(pattern, -1)

,(?=(?:(?:[^\"]*\"){2})*[^\"]*$)

僅當所討論的逗號與字符串的末尾之間有偶數個" ,這才匹配。

請注意, -1split參數很重要,否則尾隨的空字符串將被忽略。

旁注:我不知道Java regex引擎的優化程度如何,因此,如果失敗,這種前瞻可能效率很低,因為它不必要地回溯。 如果遇到性能問題,請嘗試使量詞具有所有格:

,(?=(?:(?:[^\"]*+\"){2})*+[^\"]*+$)

這將阻止引擎回溯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM