如何编写可匹配逗号-引号-逗号格式的正则表达式?
ETL场景CSV异常结构清洗方案
问题说明
所有字段值均被引号包裹、逗号分隔的CSV文件中,存在,",(两个逗号之间仅存在单个引号)的异常结构,需将该结构替换为单个逗号,作为ETL抽取的前置处理环节。
核心匹配逻辑
直接定位异常子串,",,全局替换为,即可,不会影响正常被完整引号包裹的字段(合法字段格式为"字段内容",,不存在前后同时为逗号的单个引号)。
不同场景实现方式
Python 脚本实现
适合嵌入自定义ETL流程的场景:
import re def clean_csv_line(raw_line): # 全局替换两个逗号间的单个引号结构为单个逗号 return re.sub(r',",', r',', raw_line) # 全量文件清洗示例 with open('input.csv', 'r', encoding='utf-8') as in_f, open('cleaned_output.csv', 'w', encoding='utf-8') as out_f: for line in in_f: out_f.write(clean_csv_line(line))
Shell 命令行快速实现
适合临时预处理、批量快速清洗场景,使用sed工具即可:sed 's/,"/,/g' input.csv > cleaned_output.csv
可视化ETL工具配置
在DataX、Flink CDC、Kettle等工具的字符串替换节点直接配置即可:
- 匹配规则:全局匹配
- 匹配内容:
,", - 替换内容:
,
校验建议
替换完成后建议抽样校验:
- 检查原包含异常结构的行,替换后字段数量是否符合预期
- 抽查正常含引号的字段,确认没有被误修改
内容的提问来源于stack exchange,提问作者LABSHMO
相关产品推荐
相关产品推荐

