【问题标题】:PowerShell Regex with csv file带有 csv 文件的 PowerShell 正则表达式
【发布时间】:2020-09-11 07:15:49
【问题描述】:

我目前正在尝试匹配一种 ID 模式并替换为 0 或 1。

example pc0045601234 replace with 1234 the last 4 and add the 3rd digit in front "01234"

我尝试了下面的代码,但结果只用没有匹配的员工填充了 userid 列

$reportPath = '.\report.csv'`$reportPath = '.\report.csv'`
$csvPath = '.\output.csv'
$data = Import-Csv -Path $reportPath
$output = @()

foreach ($row in $data) {
    
    $table = "" | Select ID,FirstName,LastName,userid
    $table.ID = $row.ID
    $table.FirstName = $row.FirstName
    $table.LastName = $row.LastName
   

    switch -Wildcard ($row.ID)
    {
    {$row.ID -match 'P\d\d\d\d\d\D\D\D'} {$table.userid = "Contractor"; continue}
    {$row.ID -match 'SEC\d\d\d\D\D\D\D'} {$table.userid = "Contractor"; continue}
    {$row.ID.StartsWith("P005700477")} {$table.userid = $row.ID -replace "P005700477","0477"; continue}
    {$row.ID.StartsWith("P00570")} {$table.userid = $row.ID -replace "P00570","0"; continue}
    
   


    default {$table.userid = "No Matching Employee"}
    }
    
    $output += $table
    
}

$output | Export-csv -NoTypeInformation -Path $csvPath

【问题讨论】:

  • 所以你从 pc0045601234 开始,想以什么结束?
  • 我想得到 5 个数字。无论第三个数字是 0 还是 1 以及最后 4 个数字。例如 PC05601234 为 01234 或 PC15601234 为 11234

标签: regex powershell-4.0


【解决方案1】:

这里有三种不同的方法可以达到预期的效果。前两个使用相同的技术,只是以不同的方式编写。

首先,我们将样本数据作为多行字符串数组放入一个变量中。这相当于$text = Get-Content $somefile

$text = @'
PC05601234
PC15601234
'@ -split [environment]::NewLine

选项1#转换为字符数组,选择第3位和后4位。

$text | foreach {-join ($_.ToChararray()| select -Skip 2 -First 1 -Last 4)}

选项2#同上,需要一个额外的-join以避免空格。

$text | foreach {(-join $_.ToChararray()| foreach{$_[2]+(-join $_[-4..-1])})}

选项 3 # 我的偏好,正则表达式。捕获所需的数字并将整个字符串替换为这两个捕获的值。

$text -replace '^\D+(?!=\d)(\d)\w+([\d]{4}$)','$1$2'

所有这些输出

01234
11234

使用不同的字符/数字组合和长度进行进一步测试。

$text = @'
PC05601234
PC15601234
PC0ABC124321
PC1DE4321
PC0A5678
PC1ABCD215678
'@ -split [environment]::NewLine

通过每个选项运行新的样本数据都会产生这个输出

01234
11234
04321
14321
05678
15678

【讨论】:

  • 我有点困惑,你在哪里将它添加到当前代码以获得结果。
  • 什么意思?样本数据存储在变量 $text 中,每个选项都针对 $text
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-15
  • 1970-01-01
  • 1970-01-01
  • 2014-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多