【发布时间】:2016-03-21 22:24:53
【问题描述】:
我正在通过 csv 解析以导出到两个类别:通过 powershell 进行匹配和非匹配。
csv中的数据格式如下:
SamAccountName xx9999xx aa0000aa ab0909xc 等
我需要一个正则表达式,它允许我过滤掉所有遵循 aa0000bb 命名约定的匹配项并将其导出到 csv 中(与不匹配 aa0000bb 约定的匹配项相同) 约定(因为它很奇怪):前 2 个是从 a-z 范围内的字母,然后是 4 个数字 0-9,然后是 2 个字母 a-z。这意味着您可以拥有 aa0000aa 和 by7690zi
现在我有:
Import-Csv "C:\Path\to\csv" | ForEach {
$Name =$_.SamAccountName;
$Name -Match '[a-z]+[a-z]+[0-9]+[0-9]+[0-9]+[0-9]+[a-z]+[a-z]'} | Out-Null; $Matches
或
ForEach ($Name in $CSV)
{
If ($Name -Match '[a-z]+[a-z]+[0-9]+[0-9]+[0-9]+[0-9]+[a-z]+[a-z]')
{
Write-Host "$Matches"
}else{
Write-Host "No Match"
}
}
两者似乎都输出不正确的随机内容。 我在想(真的希望)有一种方法可以通过以下方式进行匹配:
a-z #For the first set of letters
0-9 #For the 4 digits
a-z #For the second set of letters
ie [a-z{2}]+[0-9{4}]+[a-z{2}]
我可以运行一个普通的'xx9999xx' -Match '[a-z]+[a-z]+[0-9]+[0-9]+[0-9]+[0-9]+[a-z]+[a-z]',它返回true,然后
PS C:\Windows> $Matches
Name Value
---- -----
0 xx9999xx
但我仍然不明白如何大规模地做到这一点。
【问题讨论】:
-
你能提供样本输入和输出吗?每行输入是否有多个aa0000aa?
-
@Arluin - 不是唯一值,因此只有一个 aa0000aa 实例,下一个值将是 aa0000ab 等。
标签: regex csv powershell