【问题标题】:Export data to CSV different row using regex使用正则表达式将数据导出到 CSV 不同的行
【发布时间】:2017-01-29 10:05:20
【问题描述】:

我使用正则表达式从文件中提取字符串并导出为 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

详细截图:


编辑:

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

【问题讨论】:

  • 显示一些数据行。

标签: regex csv powershell-4.0


【解决方案1】:

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

$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 都允许通过参数-Encoding 覆盖默认值)。


编辑:

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

Import-Csv 'C:\path\to\input.csv' | ForEach-Object {
  $row = $_
  $row.id -replace '[{}]' -split ',' | ForEach-Object {
    $row | Select-Object -Property *,@{n='id';e={$_}} -ExcludeProperty id
  }
} | Export-Csv 'C:\path\to\output.csv' -NoType

【讨论】:

  • 感谢您回答我的问题。我已经尝试了代码,但它没有像我预期的那样工作。我还在问题中附加了快照详细信息以便更好地理解。
  • 显然不可能从我发布的示例代码中获得屏幕截图中的输出。请使用输入样本和minimal reproducible example 更新您的问题,这会产生不需要的输出。
  • Ansgar 我已尝试使用您提供的代码,但仍未成功。由于合规性,我无法上传整个代码,而是上传了我想要获取的快照。
  • Ansgar 再次感谢您的宝贵时间。我已经尝试了代码,但仍然无法正常工作。
  • 没有minimal reproducible example,我无能为力。祝你好运。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-22
  • 2020-10-02
  • 2022-11-03
相关资源
最近更新 更多