我有$ variables和$ Array1
$ Array1包含:
FirstName LastName ZipCode Race Alice Jones {90011, 90017, 90006} American Indian, Asian, Hispanic Allen Rogers {90025, 90001} African American, American John Smith {90001} American Bob Wilson {90025, 90001, 90055, 90084} African American, American,... Barbara Hall {90025} White
我想遍历$ Array1并检查$ Variable是否在ZipCode中。 如果它匹配,那么做一些东西。
我拥有的是
foreach ($variable in $Variables) {
$result=$Array1 | Where {$_.ZipCode -match "$variable$"}
}
由于某种原因,它返回
Allen Rogers {90025, 90001} African American, American John Smith {90001} American Bob Wilson {90025, 90001, 90055, 90084} African American, American,...
我希望完全匹配。 输出应该是:
John Smith {90001} American
我试过像
这样的正则表达式$_.ZipCode -match "^$variable$"
但它没有用。
答案 0 :(得分:1)
您需要使用-ceq
进行完全匹配。这也是区分大小写的匹配。 -match
/ -cmatch
使用正则表达式匹配模式
然而,要使用的更好的比较运算符是-contains
。
Where-Object { $_.ZipCode -contains "$variable" }
确保两种比较都匹配类型。如果您的数组使用[Int]
,请确保您与[Int]
对象进行比较。这可以在PSv3 +中进一步简化:
? ZipCode -contains $variable
编辑OP:
| Where-Object { ($_.ZipCode.Count -eq 1) -and ($_.ZipCode -eq $variable) }
答案 1 :(得分:0)
您可以修改
$_.ZipCode -match "^$variable$"
到
$_.ZipCode -match ("^"+$variable+"$")
它将根据需要评估正则表达式。