【问题标题】:Convert comma-delimited CSV to pipe-delimited file with Notepad++使用 Notepad++ 将逗号分隔的 CSV 转换为管道分隔的文件
【发布时间】:2018-09-18 14:54:59
【问题描述】:

我有一个逗号分隔的 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"

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

1002|rfewell@example.com||

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

【问题讨论】:

    标签: regex notepad++ delimiter


    【解决方案1】:

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

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

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

    【讨论】:

    • 是否可以使用管道字符转义数据? (即:1004,Special|HRIT1004|"Special|HRIT"
    • @StevenVascellaro 您的意思是要用双引号将包含| 的逗号分隔字段括起来吗?尝试([^,|\v]*\|[^,\v]*)|, 并替换为(?1"$1":|)
    【解决方案2】:

    你可能想试试这个:

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

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

    【讨论】:

      猜你喜欢
      • 2020-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-21
      • 1970-01-01
      • 1970-01-01
      • 2017-09-25
      • 1970-01-01
      相关资源
      最近更新 更多