如何在Notepad++中用正则表达式将CSV空列替换为0
CSV空列值替换为0的正则实现方案
你之前使用的方案失效的核心原因是:正则匹配会消费已经命中的字符,遇到,,这类连续空列时,第一个空列匹配完成后已经占用了相邻的逗号分隔符,后续的空列无法被识别,因此连续空列、行首空、行尾空的复合场景会匹配失效。
可行正则方案(支持单次替换覆盖所有场景)
- 查找内容:
(?<=^|,)(?=,|$) - 替换内容:
0
规则逻辑说明
(?<=^|,)为正向回顾断言,匹配当前位置的前侧是行开头或逗号,不会消费任何字符(?=,|$)为正向前瞻断言,匹配当前位置的后侧是逗号或行结尾,不会消费任何字符- 两个断言共同定位到空列的间隙位置,直接填入0即可,因为不会占用分隔符,连续空列、行首/行尾空的场景都能被全部匹配。
针对你给出的失效测试用例,替换效果如下:
- 原行
,,0替换后为0,0,0 - 原行
1.3,,替换后为1.3,0,0
所有空列都可以被正确填充。
替代方案
如果你不想修改原有匹配规则,也可以重复执行你之前的替换操作2~3次,直到没有新的匹配项生成,也可以覆盖连续空列的场景。
注意:上述方案仅适用于无引号包裹字段、无嵌套逗号的简单CSV格式,如果你的CSV存在带逗号的引号包裹字段,建议使用专门的CSV解析库处理,不要直接用正则操作。
内容的提问来源于stack exchange,提问作者Ajay
相关产品推荐
相关产品推荐

