如何使用正则表达式合并CSV文件中首字段相同的行?
可以用正则实现,附具体方案
当然可以用正则实现这个需求,不过得在支持多行匹配和反向引用的工具里操作(比如VS Code、Notepad++、GNU sed等),下面是具体步骤:
正则替换方案(以VS Code为例)
- 打开你的CSV文件,按下
Ctrl+H调出替换面板 - 点击面板右上角的「正则表达式」按钮(图标是
.*) - 在「查找内容」框输入:
^([^,]+)(.*)\s*\n\1(.*)$
- 在「替换为」框输入:
$1$2$3
- 点击「全部替换」,就能得到你想要的结果
正则语法解释
^([^,]+):匹配每行开头到第一个逗号前的标识,把它存为分组1(.*):匹配标识后面的所有内容,存为分组2\s*\n:匹配行尾的空白字符(包括换行)\1:反向引用分组1的内容,也就是和上一行相同的标识(.*):匹配下一行标识后面的所有内容,存为分组3
替换时把分组1+分组2+分组3拼接起来,就实现了合并两行的效果。
命令行工具方案(GNU sed)
如果习惯用命令行处理,可以用GNU sed执行以下命令:
sed -E ':a;N;s/^([^,]+)(.*)\n\1(.*)/\1\2\3/;ta' input.csv > output.csv
这个命令会循环查找并合并连续的相同标识行。
注意事项
- 确保每对相同标识的行是连续相邻的,否则正则不会匹配到
- 不同工具的正则语法可能有细微差异,比如Notepad++里不需要额外设置多行模式,但VS Code要确保正则模式开启
内容的提问来源于stack exchange,提问作者freewheeler
相关产品推荐
相关产品推荐

