Powershell使用regx查找角色位置

时间:2016-02-29 08:13:58

标签: regex powershell

我想在第五个逗号之前添加“在第三个逗号之后”。怎样才能在powershell中完成?

我的想法是使用正则表达式函数来查找第三个和第五个逗号的位置,然后通过

添加“
$s.Insert(4,'-') **In case reg return position 4

示例数据

04642583,3,HC Mobile,O213,Inc,SIS Services,KR,Non Payroll Relevant,KR50

输出

04642583,3,HC Mobile,"O213,Inc",SIS Services,KR,Non Payroll Relevant,KR50

这是我试过的代码,但它失败了'不允许空管元素'如何修复

$source  = "D:\Output\MoreComma.csv"
$FinalFile = "D:\Output\MoreComma_Corrected.csv"

$content = Get-Content $source
foreach ($line in $content)
{
$items = $line.split(',');
$items[3] = '"'+$items[3]
$items[4] = $items[4]+'"';
$items -join ','
} | Set-Content $FinalFile

1 个答案:

答案 0 :(得分:1)

如果您知道格式(例如,您知道它总是以逗号分隔的方式);而你只是想要实现这个目标;你可以简单地拆分线,添加引号并再次加入线。

示例:

$data = "04642583,3,HC Mobile,O213,Inc,SIS Services,KR,Non Payroll Relevant,KR50";

$items = $data.split(',');
$items[3] = '"'+$items[3]
$items[4] = $items[4]+'"';
$items -join ','

这将产生一行:

04642583,3,HC Mobile,"O213,Inc",SIS Services,KR,Non Payroll Relevant,KR50

鉴于您已将其存储在CSV文件中:

$file = "C:\tmp\test.csv";
$lines = (get-content $file);
$newLines=($lines|foreach-object {    
 $items = $_.split(',');
 $items[3] = '"'+$items[3]
 $items[4] = $items[4]+'"';
 $items -join ','
})

如果需要,您可以在新文件中输出结果

 $newLines|Set-content C:\tmp\test2.csv

这会“混乱”你的CSV格式文件(因为它会考虑“合并列”),但我猜这是你想要实现的目标?