【问题标题】:stripping extra text qualifier from a CSV - part 2从 CSV 中去除额外的文本限定符 - 第 2 部分
【发布时间】:2013-10-30 04:38:26
【问题描述】:

关于第 1 部分,请参阅this SO post

我有一个 CSV,其中某些字段由 " 符号分隔作为 TextQualifier。

请参见下面的示例。请注意,每个整数(例如 1、2、3 等)都应该是一个字符串。限定字符串被" 符号包围。

1,2,3,"qualifiedString1",4,5,6,7,8,9,10,11,12,13,14,15,16,"qualifiedString2""

请注意最后一个限定字符串如何将" 符号作为字符串的一部分。

用户 @mjolinor 建议使用此 powershell 脚本,它可以修复上述情况,但不能修复下面的“第 2 部分”情况。

(get-content file.txt -ReadCount 0) -replace '([^,]")"','$1' |
 set-content newfile.txt

这是问题的第 2 部分。我需要一个解决方案: 额外的" 符号可以随机出现在字符串中。这是另一个例子:

1,2,3,"qualifiedString1",4,5,6,7,8,9,10,11,12,13,14,15,16,"qualifiedS"tring2"

您能否建议一种优雅的方法来自动清理 CSV 以消除多余的 " 限定符?

【问题讨论】:

    标签: powershell csv syntax data-cleaning


    【解决方案1】:

    你只需要一个不同的正则表达式:

    (get-content file.txt -ReadCount 0) -replace '(?<!,)"(?!,|$)',''|
     set-content newfile.txt
    

    该语句将替换任何前面没有逗号,或后面没有逗号或行尾的双引号。

    $text = '1,2,3,"qualifiedString1",4,5,6,7,8,9,10,11,12,13,14,15,16,"qualifiedS"tring2"'
    $text -replace '(?<!,)"(?!,|$)',''
    
    1,2,3,"qualifiedString1",4,5,6,7,8,9,10,11,12,13,14,15,16,"qualifiedString2"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-23
      相关资源
      最近更新 更多