首页 > 解决方案 > 使用 Notepad++ 将逗号分隔的 CSV 转换为管道分隔的文件

问题描述

我有一个逗号分隔的 CSV 文件 ( ,),其中逗号通过将数据括在引号 ( ") 中来转义。

ID,Email,Job Title
1001,wdaelman@example.com,Technician
1002,rfewell@example.com,"Specialist, HRIT"
1003,jcoulbeck@example.com,"Director, Nursing"

我想将我的 CSV 转换为以竖线分隔的文件 ( |),方法是使用 Notepad++ 查找并用竖线替换未包含在双引号 ( ") 中的任何逗号。

ID|Email|Job Title
1001|wdaelman@example.com|Technician
1002|rfewell@example.com|"Specialist, HRIT"
1003|jcoulbeck@example.com|"Director, Nursing"

我的第一种方法是使用正则表达式来匹配任何不带引号的逗号。但是,("[^"]*")|,在 Notepad++ 中搜索替换了不带引号的逗号和任何包含逗号的带引号的字符串。

1002|rfewell@example.com||

如何使用 Notepad++将逗号分隔的 CSV 文件 ( ,) 转换为管道分隔的文件 ( )?|

标签: regexnotepad++delimiter

解决方案


您可以使用您的正则表达式, ("[^"]*")|,,但您需要替换为(?1$1:|).

该模式匹配并捕获到第 1 组 a中,然后除了a (with ) 或 ( )"之外的任何 0+ 字符仅匹配逗号(即,双引号子字符串之外的逗号,因为那些已经匹配前面的分支)。""("[^"]*")|

(?1$1:|)替换模式意味着一旦第 1 组匹配 ( ) (?1,第 1 组的值应该放回原来的位置(请参阅$1占位符),否则 ( :) 将匹配的字符串(即逗号)替换为管道符号。

在此处输入图像描述


推荐阅读