求能按逗号分割但保留双引号内原子字符串的正则表达式
正则表达式提取带引号包裹的CSV字段(含分隔符)
需求说明
需要从以下字符串中提取所有字段,双引号包裹的内容(即使内部包含逗号)视为一个整体,提取结果保留字段后的逗号(最后一个字段除外):
2022-09-22T03:55:59.433Z,,,,sm100,"sm100.w.gm.net=25 2.7.2 mailto:012323@eu-w1.as.com [IId=200023, Hostname=mky.wgm.net] Queued info",,SMTP,HAREDIRECT
预期提取结果:
2022-09-22T03:55:59.433Z, , , , sm100, "sm100.w.gm.net=25 2.7.2 mailto:012323@eu-w1.as.com [IId=200023, Hostname=mky.wgm.net] Queued info", , SMTP, HAREDIRECT
解决方案正则
使用以下正则匹配所有字段(含后续分隔符):
(?:"[^"]*"|[^,]*)(?:,|$)
正则逻辑解释
(?:"[^"]*"|[^,]*):匹配两种内容"[^"]*":匹配双引号包裹的完整内容,内部逗号不会被拆分[^,]*:匹配非逗号的任意字符,包括空字符串,对应连续逗号之间的空字段
(?:,|$):匹配字段后面的逗号,或者字符串结尾,保证最后一个字段也能被匹配
现有正则的问题
你之前尝试的,(?![\" ])仅能排除部分逗号,但无法识别引号的开闭状态,会错误拆分引号内部的内容,同时也无法直接提取出包含空字段的完整结果。
内容的提问来源于stack exchange,提问作者Udar
相关产品推荐
相关产品推荐

