0

对于第 1 部分,请参阅此 SO 帖子

我有一个 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 以消除冗余"限定符?

4

1 回答 1

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"
于 2013-10-29T20:38:26.073 回答