Powershell正则表达式删除逗号但不删除分隔符

时间:2016-08-06 09:06:09

标签: regex csv powershell

我将一个分隔的CSV带到PowerShell中,删除换行符,下面的代码可以正常工作,但我发现我还需要删除额外的逗号,但不知道如何格式化正则表达式。

(Get-Content -Path $fullpath -Raw) -replace '(?<!\x0d)\x0a'," " | out-file $fullpath

我的输入CSV是:

"field1","field2","field3","fred,mary,john,brian","field5"

所以我想保留","(包括引号),但要删除其他任何逗号。

所以我最终得到了:

"field1","field2","field3","fred mary john brian","field5"

2 个答案:

答案 0 :(得分:2)

这样做。

(Get-Content -Path $fullpath -Raw) -replace '(?<!"),|,(?!")',' ' | out-file $fullpath

它只会匹配逗号不是由引号引导或不引用的逗号。
对于所有逗号都是如此,除了引号括起来的那些:","

要仅删除特定字段的逗号,可以使用带有标题的Import-Csv。

$csvin = Import-Csv -Path $fullpath -Header f1,f2,f3,f4,f5
$csvin |%{$_.f4=$_.f4.replace(',',' ')}
$csvin |ConvertTo-Csv -NoTypeInformation |Select-Object -Skip 1 |Set-Content -Path $fullpath

答案 1 :(得分:1)

您可以导入CSV文件,从所有字段中删除逗号,然后再次将其写为CSV。无需尝试编写保持结构完整的正则表达式:

$data = Import-Csv foo.csv
$columns = $data | gm | where MemberType -eq NoteProperty | % Name
$newdata = $data | %{
  foreach ($c in $columns) {
    $_.$c = $_.$c -replace ',',' '
  }
}
$newdata | Export-Csv foo-rewritten.csv