【发布时间】:2021-05-11 17:43:12
【问题描述】:
我有一个 csv 文件,每个字段都有引号。
有些字段里面可以有多个双引号。我想用额外的双引号来转义它们。
","ABC "XYZ" PQRS","
","ABC "XYZ"","
","ABC "A" "B" 测试","
","ABC 2.5" "C" 测试","
我得到了link 的帮助,并且能够使用正则表达式[regex]$r='(","[^"]+"[^"]+?",")' 覆盖内容内包含单双引号的场景。但是,在内容中有多个双引号的情况下会卡住。
[regex]$r='(","[^"]+"[^"]+"",")' # Not working
get-content C:\Projects\MyProject\testRegexFordoublequotes.csv | foreach {
#save each line to a variable to make it easier to track
$line=$_
#look for a regex match
$find=$r.matches($line)
if ($find[0].Success) {
foreach ($match in $find) {
#the original string we matched on
$found=$match.value
#replace the substring
$replace= '","'+ $found.Trim('","').Replace('""','"').Replace('"','""')+ '","'
#replace the full string and write to the pipeline
$line -replace $found,$replace
} #foreach
} #if
else {
#no match so write the line to pipeline
$line
}
} | Set-Content C:\Projects\MyProject\modified.csv -Force
您能否帮我定义正则表达式,这将有助于字段内的多个双引号。
【问题讨论】:
-
使用
Import-Csv之类的东西,而不是尝试自己解析。 -
@MattClark,感谢您的建议。由于某些字段的内容内包含双引号,导入失败。此外,大约有 25 万个这样的文件,并且有很多这样的字段。所以,想用正则表达式来做它更快
-
@MattClark,我不太擅长正则表达式。实现起来看起来很复杂。正如您的建议,让我看看是否可以使用 csv 解析器处理它。但是,我需要找出具有这些类型内容的文件
-
正如其他人指出的那样,最好使用 CSV 解析器,例如 github.com/peterthoeny/parse-csv-js。但是,您的文本不符合 CSV,因此 CSV 解析器无济于事。这些是实际的线条还是缩短的线条?开头和结尾的
","看起来很奇怪。此外,是否所有字段都用引号括起来,例如相邻字段是否总是由","分隔?
标签: regex powershell csv str-replace double-quotes