使用记事本++将逗号分隔的CSV转换为管道分隔的文件

时间:2018-09-17 16:57:43

标签: regex notepad++ delimiter

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

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

我想通过使用Notepad ++查找并用管道替换用双引号(|括起来的逗号)来将CSV转换为以管道分隔的文件(")。

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

我的第一种方法是对match any unquoted commas使用正则表达式。但是,在Notepad ++中搜索("[^"]*")|,会替换未加引号的逗号和所有包含逗号的加引号的字符串。

1002|rfewell@example.com||

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

2 个答案:

答案 0 :(得分:1)

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

模式匹配并捕获到组1中,一个",然后捕获除"之外的任何0+字符,然后又捕获一个"(带有("[^"]*")),或( |仅匹配一个逗号(即,双引号子字符串之外的逗号,因为它们已经与前面的分支匹配)。

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

enter image description here

答案 1 :(得分:1)

您可能想尝试一下:

  1. 包装具有|字符的数据。首先,将,([^"\n,]*\|[^"\n,]*)替换为,"\1"
  2. 使用|作为定界符:将,("[^"\n]*"|[^,\n]*)替换为|\1

注意:我完全忽略了第一列,因为它似乎是不需要额外处理的ID