使用正则表达式将数据导出到CSV不同的行

时间:2017-01-29 10:05:21

标签: regex csv powershell-v4.0

我使用正则表达式从文件中提取字符串并导出为CSV。我可以弄清楚如何将每个匹配值提取到不同的行。结果将以单个单元格结束

{  69630e4574ec6798,  78630e4574ec6798,  68630e4574ec6798}

我需要将它放在CSV中的不同行中,如下所示:

69630e4574ec6798
78630e4574ec6798
68630e4574ec6798
$Regex = [regex]"\s[a-f0-9]{16}"
Select-Object @{Name="Identity";Expression={$Regex.Matches($_.Textbody)}} |
    Format-Table -Wrap |
    Export-Csv -Path c:\temp\Inbox.csv -NoTypeInformation -Append

详情截图:

screenshot

修改

我一直在尝试拆分我在CSV中的数据,但是我很难分割输出数据" id"下一行,因为他们都进入一个单元格" {56415465456489944,564544654564654,46565465}"。 在下面的屏幕截图中,前两行是源输入,第二组中突出显示的行是我想要获得的输出。

Screenshot

1 个答案:

答案 0 :(得分:0)

更改正则表达式,使其在捕获组中具有十六进制子字符串(以排除前导空格):

$Regex = [regex]"\s([a-f0-9]{16})"

然后从每场比赛中提取第一组:

$Regex.Matches($_.Textbody) | ForEach-Object {
    $_.Groups[1].Value
} | Set-Content 'C:\temp\a.txt'

使用Set-Content而不是Out-File,因为后者默认以Unicode格式创建输出文件,而前者默认为ASCII输出(两个cmdlet都允许通过参数{{1覆盖默认值] }})。

修改

要从您-Encoding列拆分数据并为每个ID创建单独的行,您可以执行以下操作:

id