regex PowerShell从CSV中的一行提取多个电子邮件域

gg58donl  于 2023-04-22  发布在  Shell
关注(0)|答案(2)|浏览(130)

我对PowerShell非常陌生,我在这个任务上遇到了麻烦。
我需要能够从一个CSV文件中的一行提取具有相同域的多封电子邮件。
这是我原来的,但它停止后,它找到一个匹配。

$myvar = @()
foreach($row in $CSV)
{ 
    If ($row.ProxyAddresses -match "\w+([-+.']\w+)*@markelintl.ca")
    {
       $myvar += $Matches[0]
    } 
}

我确信我需要将Select-String-allMatches一起使用,我发现了这个例子:

Select-String "@([a-z1-9\.-]+)" -AllMatches | 
      Select-Object $row. Matches | 
      Select-Object Groups | 
      ForEach{$_.Groups[1]} | 
      Select-Object -ExpandProperty Value

但我有麻烦匹配我的变量到这个(由于我的新手能力)。
在这种情况下,Select-String是我的最佳选择吗?

xoefb8l8

xoefb8l81#

如果更改了向数组中添加地址的部分,代码应该可以正常工作。
试试这样的方法:

$myvar = @()
foreach($row in $CSV)
{ 
    If ($row.ProxyAddresses -match "\w+([-+.']\w+)*@markelintl.ca")
    {
       $myvar += $row.ProxyAddresses
    } 
}

为了给予您一个更具体的答案,有一个包含测试数据的CSV样本会很有帮助。
希望有帮助!

fivyi3re

fivyi3re2#

在不知道ProxyAddress如何存储在CSV中的情况下,您可以执行以下操作:

$myvar = $CSV.ProxyAddresses | ForEach-Object { 
    [regex]::Matches($_, '(?im)([\w-+.'']+@markelintl\.ca)').Value
}

相关问题