从CSV中剥离额外的文本限定符 - 第2部分

时间:2013-10-29 20:11:54

标签: powershell csv syntax data-cleansing

有关第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以消除多余的"限定符?

1 个答案:

答案 0 :(得分: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"