gpt4 book ai didi

arrays - Powershell:如何在不完全匹配的数组中查找项目?

转载 作者:行者123 更新时间:2023-12-02 23:58:09 25 4
gpt4 key购买 nike

我有一系列类似的物品:

$arr = "server1", "server2", server3"

我有一个搜索值:
$ser = "server3-test"

我想在数组中找到相似的值,而无需修改我正在寻找的实际值(也就是字符串拆分等)。

所以像:
if($arr -contains (similar $ser)) {do stuff}

最佳答案

您可以通过过滤来做到这一点:

if (($arr | Where-Object { $_ -like 'server3*' })) {
# do stuff
}

if ($arr.Where( { $_ -like 'server3*' } )) {
# do stuff
}

您还可以利用 -like-match运算符可以对集合进行操作的事实,并返回满足条件的集合,然后进一步利用空集合将评估 $false的事实:
if ($arr -like 'server3*') {
# do stuff
}

重新阅读您的问题后,我发现这并不是您想要的。

在您的示例中, $arr中的值是 $ser的子集,因此您可以执行以下操作:
if ($arr.Where( { $ser -match $_ } )) { }

但尚不清楚是否会一直如此。

也许彼此比较检查也许更安全,但也更冗长:
if (
$arr | Where-Object {
$_ -like "*$ser*" -or
$ser -like "*$_*"
} ) {
# do stuff
}

要知道实际匹配的是什么,我建议使用稍微不同的方法:
$arr | ForEach-Object {
if ($_ -like $ser) {
# do stuff
# $_ will refer to the array member that was matched
}
}

需要注意的是,对于每个匹配, # do stuff将执行一次,如果发现任何匹配,则不执行一次。

另一种可能性:
$itemsMatched = $arr -like $ser
if ($itemsMatched) {
# do stuff (executed once)
}

在这种情况下, $itemsMatched将包含匹配的数组成员(可能不止一个)。

关于arrays - Powershell:如何在不完全匹配的数组中查找项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37421605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com